繁体   English   中英

利用结构数组取消引用时出现分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM