使用结构数组取消引用时的分段错误



我正在做学校作业。这是一项任务,每 2 周,我们必须扩展或更改它的布局。本周,我们被迫使用指针。我很难理解内存以及如何在没有分段错误的情况下正确分配内存。

我创建了一个初始化为 char 指针的结构数组。每次循环时,在第一次循环之后,我都会得到"分段错误"。我根本不明白为什么?

我可以包含整个代码,但根据 gdb,我的问题与 1 个特定行有关。

const int arraySize = 100;
int counter = 0;
struct contacts{
char * name;
char * date;
char * note;
};
contacts * contactList[arraySize] = 
contactList = new contacts;
for(int i = 0; i <= counter; i++){
contactList[i]->name = new char[20];  //Segmentation Fault here
std::cout <<  contactList[i]->name << std::endl; 
//first 1 outputs = fine
//2nd output = segmentation error
counter++;
}

代码经过简化和最小化,便于阅读。如果有人想要它,我可以插入整个代码。只是要小心,这是相对较大的。我已经通过代码设置了断点以缩小范围。它归结为这一具体声明。其他一切都很好,特别是因为它编译得很好。

任何提示或帮助都很棒。

我也不允许使用任何向量、字符串等,只能使用字符串。 用户提到我只创建1个联系人。

contacts * contactList[arraySize];
contactList = new contacts;
//Instead it should be like this:
contacts * contactList[arraySize];
contactList = new contacts[arraySize];

更新: 我尝试使用每个人都推荐的东西。

contacts* contactList[arraySize];
contactList = new contacts[arraySize];

但是我收到此错误:

error: incompatible types in assignment of‘ContactClass::contacts*’ to ‘ContactClass::contacts* [100]’

您的第一个问题在此行中:

contacts * contactList[arraySize] = new contacts;

它应该是

contacts* contactList = new contacts[arraySize];

下一个问题就在这里

for(int i = 0; i <= counter; i++){

应该是

for(int i = 0; i < arraysize; i++){
contactList[i].name = new char[20];
}

最新更新