簡體   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