段错误 (核心已转储)
struct Addressbooks {
struct Person personArray[MAX];
int m_Size; // 当前已用大小
};
void addPerson(Addressbooks *abs) {
// 开始添加操作
string name;
cout << "输入姓名:";
cin >> name;
// 下面这句话执行后就报:段错误 (核心已转储)
abs->personArray[abs->m_Size].m_Name = name;
}
问题原因:没有对 Addressbooks 结构体中的 m_Size 成员进行初始化。由于未初始化,m_Size 的值是一个随机的垃圾值,当使用这个随机值作为数组索引时,就可能会访问到未分配的内存区域,从而导致段错误。
解决:
Addressbooks abs;
// 初始化通讯录的大小为 0
abs.m_Size = 0;