在编译我的代码时,我在代码中发现了一个分段错误,但实际上并不了解它们。 我不在寻找我的代码的答案更多的东西,这将帮助我了解什么是分段错误,以及为什么发生。可以参考,这里是我正在研究的代码(我知道它不是一个很好的解决方法,但我仍然在学习)。分段错误
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;
}
你想做什么? 'validContactList [z] = listOfNumbers [s];'这行看起来没有什么用处,因为'validContactList'是一个函数范围的符号;即当函数返回时它将被销毁,留给你一个内存泄漏,包含你用'validContactList = new Contact [tempHoldCount];创建的所有联系人“ – Eric