请求用户输入后 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 指向无效内存。