分段错误发生在某些编译器中,但未发生在其他编译器中

segmentation fault happened in some compiler but not others

本文关键字:编译器 其他 错误 分段      更新时间:2023-10-16

我有以下代码。ubuntu12.04 中的编译器 g++ 告诉我存在分段错误。但是当我在 MingW g++ 编译器中尝试相同的代码时,它通过了。

有什么想法吗?

#include<iostream>
using namespace std;
class ListNode{
    public:
        ListNode *next;
        int val;
        ListNode(int x):val(x),next(NULL){};
    };
    int main(){
        ListNode *head;
        head->val=0;
        ListNode *p=head;

        for(int i=1;i<=10;i++){
            p->next=new ListNode(i);
            p=p->next;
        }
    return 0;
}

你在分配之前正在使用 head。这是未定义的行为。在MinGW系统上,它没有崩溃纯粹是"运气",但它仍然无效。您必须先分配人头:

ListNode *head;
head = new ListNode(0);
// do some stuff
// delete head;

此代码

ListNode *head;
    head->val=0;

无效。您没有为 ListNode 分配内存。所以你不能写头>值=0;

head->val=0;

访问对象 Head 应该指向的成员变量 val,但 head 还没有指向任何对象。

相关文章: