C++程序打印指针值时崩溃:数组最值指针访问异常问题
嘿,我来帮你揪出这个崩溃的问题根源~
为什么打印最小值时会崩溃?
你的程序触发了野指针解引用的错误(错误码0xC0000005就是Windows系统下的内存访问冲突),问题出在ptrmin指针没有被正确初始化:
- 看你的最小值判断逻辑:你先把
armin设为数组第一个元素ar[0],然后循环遍历数组。只有当当前元素比armin小时,才会更新armin并给ptrmin赋值。 - 在你的测试用例里,数组第一个元素50就是最小值,整个循环里
if(armin > ar[i])这个条件一次都没触发,所以ptrmin自始至终都没有被赋值——它的初始值是随机的垃圾地址,属于野指针。当你试图用*ptrmin读取它指向的内容时,程序访问了非法内存,直接崩溃。
顺带提一句:你的最大值逻辑其实也有隐患——如果数组的第一个元素就是最大值,ptrmax同样会变成野指针,只是你的测试用例刚好没碰到这种情况而已。
怎么修复?
解决方法非常简单,在初始化armin和armax的同时,给对应的指针也赋初始值,让它们一开始就指向数组的第一个元素:
// 初始化最大值及指针 armax = ar[0]; ptrmax = &ar[0]; // 新增:让指针初始指向第一个元素 // 初始化最小值及指针 armin = ar[0]; ptrmin = &ar[0]; // 新增:让指针初始指向第一个元素
这样不管后续循环里的条件是否触发,指针都有合法的指向,再也不会出现野指针的问题了。
另外补充个小知识点:fflush(stdin)是标准C未定义的行为,不建议用来清除输入缓冲区。如果需要处理输入后的多余字符,可以自己写个小逻辑(比如循环读取字符直到遇到换行符)。
内容的提问来源于stack exchange,提问作者John Redman
相关产品推荐
相关产品推荐

