分段错误

时间:2015-06-17 17:43:31

标签: c++ segmentation-fault

在编译我的代码时,我在代码中遇到了分段错误,实际上并不理解它们。 我不是在寻找我的代码的答案,而是更多的东西可以帮助我理解分段错误是什么,以及它为什么会发生。虽然参考,这里是我正在处理的代码(我知道这不是一个很好的方法,但我还在学习)。

void PhoneBook::verifyAllContacts() {
    Contact* listOfNumbers;
    listOfNumbers = new Contact[numContacts];
    int tempHoldCount = 0;

    for(int i = 0; i < numContacts; i++) {
        if(listOfNumbers[i].verifyPhoneNumber() == true && listOfNumbers[i].getEmergencyContact()->verifyPhoneNumber() == true)
            tempHoldCount++;
    }

    Contact* validContactList;
    validContactList = new Contact[tempHoldCount];

    for(int z = 0; z < tempHoldCount; z++) {
        for(int s = 0; s < numContacts; s++) {
            if(listOfNumbers[s].verifyPhoneNumber() == true && listOfNumbers[s].getEmergencyContact()->verifyPhoneNumber() == true)
                validContactList[z] = listOfNumbers[s];
        }
    }

    delete listOfNumbers;
}

2 个答案:

答案 0 :(得分:0)

当代码访问内存分配给正在使用的变量之外的内存时,通常会发生分段错误。即。

int myarray[10];

for(int i=0;i<=10;i++)
{
  myarray[10] = 0;
}

会在运行时创建分段错误,因为myarray [10]不是声明的变量,因为myarray只有10次迭代(0-9)而不是11次

答案 1 :(得分:0)

由于您使用new []lisOfNumbers分配内存,因此需要使用

delete [] listOfNumbers;

这可能无法解决您的细分问题,但这是正确的做法。严格来说,使用

delete listOfNumbers;

导致未定义的行为。