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

C++报read access violation 0xCCCCCCCC错误无法显示姓名列表

问题根因
  • 你定义的Person* person[5]是存储5个Person类指针的数组,所有指针仅完成声明、未指向实际分配的Person对象内存,属于野指针。直接访问person[i]->name时会触发读取访问权限冲突,报错的0xCCCCCCCC正是Windows调试模式下未初始化栈内存的特征标识,和你判断的未初始化指针问题一致。
  • 赋值逻辑存在笔误:循环内写死为n[1],会导致所有姓名都取数组第二个值,需要改为n[i]才能依次赋值5个不同姓名。
修复后可运行代码
#include <iostream>
#include <string>
using namespace std;

class Person {
public:
  string name;
};

void createPerson(Person* person[]);


int main() {
  Person* person[5];
  createPerson(person);

  for (int i = 0; i < 5; i++) {
    cout << person[i]->name << endl;
  }

  // 释放堆内存避免泄漏
  for (int i = 0; i < 5; i++) {
    delete person[i];
  }

  return 0;
}

void createPerson(Person* person[]) {
  string n[5] = { "Dwayne Johnson", "Connor McGregor", "SpongeBob","BatMan", "Ash Ketchum" };
  for (int i = 0; i < 5; i++) {
    // 先为每个指针分配实际的Person对象内存
    person[i] = new Person();
    // 改用下标i取对应姓名
    person[i]->name = n[i];
  }
}
核心修改点说明
  • 在给person[i]->name赋值前,先通过new Person()为每个指针分配堆上的Person对象内存,指针指向合法内存后再操作成员变量就不会触发访问冲突。
  • 把赋值的n[1]改为n[i],保证每个Person对象取到对应位置的姓名。
  • 新增了内存释放逻辑,避免堆内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:08