在要求用户输入后,C ++程序崩溃

时间:2015-03-29 21:54:25

标签: c++ linked-list

好的,所以我这里有一个程序可以正常工作,除非调用插入函数时要求用户输入。一旦我到达这部分代码,程序就会完全退出(停止响应)。

从调试中我得到错误: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语言)。任何关于我为什么一直收到错误的帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

我发现至少有一个问题。看一下这个片段:

if (newNode = NULL) {
        cout << "Fatal Error: Out of Memory. Exiting now." << endl;
        return 0;
    }
else {
    ...

注意什么不对?您使用赋值运算符=而不是比较运算符==。所以newNode设置为NULL。此计算结果为false,因此将跳过if语句的主体以支持else语句。现在,如果您尝试取消引用newNode(您这样做),则会因为newNode指向无效内存而导致分段错误。