[英]Segmentation Fault when utilizing struct array dereference
我正在做学校作业。 这项作业每2周需要扩展或更改其布局。 本周,我们被迫使用指针。 我很难理解内存以及如何正确分配内存而又没有分段错误。
我创建了一个初始化为char指针的struct数组。 每次循环时,在第一次循环后,我都会收到“分段错误”。 我根本不明白为什么?
我可以包含整个代码,但是根据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++;
}
该代码经过简化和最小化,易于阅读。 如果有人愿意,我可以插入整个代码。 只是要注意那是比较大的。 我在代码中设置了断点以缩小范围。 它取决于该特定声明。 其他一切我都很好,尤其是因为它们都可以完美地编译。
任何提示或帮助都可以。
另外,我不允许使用任何向量,字符串等,只能使用cstrings。 用户提到我只创建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];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.