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