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

C++结构体数组使用指针后输出不正确且程序异常终止是什么原因?

问题诱因

你的程序崩溃、输出异常全部是指针操作不规范触发的未定义行为,具体错误点如下:

  • 数组越界访问:C++中长度为n的数组合法下标范围是0 ~ n-1,你定义的ptr、details数组长度均为2,合法下标只有0和1,代码中ptr[2] = &details[2];属于越界操作,本身就会破坏内存布局。
  • 野指针访问:你仅对越界的ptr[2]做了赋值,实际后续要用的ptr[0]、ptr[1]完全没有初始化,属于指向未知内存的野指针。后续所有通过ptr[m]->xxx的读写操作都是访问非法内存,直接导致程序输入时直接崩溃、输出异常。
修复方案

把main函数中错误的ptr[2] = &details[2];代码替换为以下指针初始化逻辑即可:

for (int i = 0; i < 2; i++) {
    ptr[i] = &details[i];
}

修改后指针数组的每个元素都对应指向details数组的对应元素,所有指针访问操作合法,程序运行就会恢复正常。

注:当前业务逻辑存在设计缺陷:每个Student结构体仅绑定1个Course结构体,如果你先录入课程再录入学生,学生信息会覆盖原有课程信息,该问题不影响当前崩溃问题的修复,属于后续业务优化范畴。

内容的提问来源于stack exchange,提问作者ADAM78

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:05