我正在完成一项学校作业。这是一项每两周一次的任务,我们必须扩展或改变它的布局。本周,我们被迫使用指针。我很难理解内存以及如何在没有分段错误的情况下正确分配内存。
我创建了一个初始化为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]’
答案 0 :(得分:2)
你的第一个问题就在这一行:
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="l" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 308 308" style="enable-background:new 0 0 308 308;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#s);}
</style>
<g id="Page-1">
<defs>
<linearGradient id="s" gradientUnits="userSpaceOnUse" x1="-483.7941" y1="514.2445" x2="-484.1468" y2="514.5996" gradientTransform="matrix(620 0 0 -620 300215 319095)">
<stop offset="0" style="stop-color:#FF0000"/>
<stop offset="1" style="stop-color:#00FF00"/>
</linearGradient>
</defs>
<path id="shape" class="st0" d="..."/>
</g>
</svg>
应该是
contacts * contactList[arraySize] = new contacts;
下一个问题就在这里
contacts* contactList = new contacts[arraySize];
应该是
for(int i = 0; i <= counter; i++){