利用struct array dereference时的分段错误

时间:2017-08-10 13:51:38

标签: c++ linux fault

我正在完成一项学校作业。这是一项每两周一次的任务,我们必须扩展或改变它的布局。本周,我们被迫使用指针。我很难理解内存以及如何在没有分段错误的情况下正确分配内存。

我创建了一个初始化为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]’

1 个答案:

答案 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++){
相关问题