You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:37:38