好的,所以我这里有一个程序可以正常工作,除非调用插入函数时要求用户输入。一旦我到达这部分代码,程序就会完全退出(停止响应)。
从调试中我得到错误:ConsoleApplication8.exe中0x00C06C39处的未处理异常:0xC0000005:访问冲突读取位置0x00000004。
int insertion(container** pointerToHead) {
int i = 0;
class container *newNode = NULL, *iterator = NULL, *follower = NULL;
class person *newPerson = NULL;
newNode = (class container*) malloc(sizeof(class container));
if (newNode = NULL) {
cout << "Fatal Error: Out of Memory. Exiting now." << endl;
return 0;
}
else {
newPerson = (class person*) malloc(sizeof(class person));
if (newPerson = NULL) {
cout << "Fatal Error: Out of Memory. Exiting now." << endl;
return 0;
}
else {
cout << "Enter the name:\n";
cin >> newPerson->name;
cout << "Enter the phone number:\n";
cin >> newPerson->phone, sizeof(newPerson->phone);
cout << "Enter the email:\n";
cin >> newPerson->email;
newNode->plink = newPerson;
if (*pointerToHead = NULL) {
*pointerToHead = newNode;
(*pointerToHead)->next = NULL;
return 0;
}
else {
if (strcmp(newPerson->name, (*pointerToHead)->plink->name) < 0) {
newNode->next = *pointerToHead;
*pointerToHead = newNode;
return 0;
}
iterator = *pointerToHead;
follower = iterator;
while (iterator != NULL) {
if (strcmp(newPerson->name, iterator->plink->name) < 0) {
newNode->next = iterator;
follower->next = newNode;
return 0;
}
follower = iterator;
iterator = iterator->next;
}
follower->next = newNode;
newNode->next = NULL;
return 0;
}
}
}
return 0;
};
调试告诉我,错误从包含以下内容的行开始:cin&gt;&gt; newPerson-&GT;名称;
这是我第一个使用C ++的程序,因此我对该语言不是很熟悉(在此作业之前我一直使用C语言)。任何关于我为什么一直收到错误的帮助将不胜感激。
答案 0 :(得分:3)
我发现至少有一个问题。看一下这个片段:
if (newNode = NULL) {
cout << "Fatal Error: Out of Memory. Exiting now." << endl;
return 0;
}
else {
...
注意什么不对?您使用赋值运算符=而不是比较运算符==。所以newNode设置为NULL。此计算结果为false,因此将跳过if语句的主体以支持else语句。现在,如果您尝试取消引用newNode(您这样做),则会因为newNode指向无效内存而导致分段错误。