请求用户输入后 C++ 程序崩溃
C++ Program crashes after asking for input from user
好的,所以我这里有一个程序,除了在调用插入函数时要求用户输入外,大部分情况下都可以正常工作。一旦我到达这部分代码,程序就会完全退出(停止响应)。
从调试中我得到错误: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 >> newPerson->name;
这是我第一个使用 C++ 的程序,所以我对这门语言不是很熟悉(在这次作业之前我一直在使用 C)。任何关于为什么我总是收到错误的帮助将不胜感激。
我至少发现了一个问题。看看这个片段:
if (newNode = NULL) {
cout << "Fatal Error: Out of Memory. Exiting now." << endl;
return 0;
}
else {
...
注意到有什么不对吗?您使用赋值运算符 = 而不是比较运算符 ==。所以 newNode 被设置为 NULL。这评估为 false,因此跳过 if 语句的主体以支持 else 语句。现在,如果您尝试取消引用 newNode(您这样做了),您将遇到分段错误,因为 newNode 指向无效内存。
好的,所以我这里有一个程序,除了在调用插入函数时要求用户输入外,大部分情况下都可以正常工作。一旦我到达这部分代码,程序就会完全退出(停止响应)。
从调试中我得到错误: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 >> newPerson->name;
这是我第一个使用 C++ 的程序,所以我对这门语言不是很熟悉(在这次作业之前我一直在使用 C)。任何关于为什么我总是收到错误的帮助将不胜感激。
我至少发现了一个问题。看看这个片段:
if (newNode = NULL) {
cout << "Fatal Error: Out of Memory. Exiting now." << endl;
return 0;
}
else {
...
注意到有什么不对吗?您使用赋值运算符 = 而不是比较运算符 ==。所以 newNode 被设置为 NULL。这评估为 false,因此跳过 if 语句的主体以支持 else 语句。现在,如果您尝试取消引用 newNode(您这样做了),您将遇到分段错误,因为 newNode 指向无效内存。