我正在做学校作业。这是一项任务,每 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];
}