我有以下代码。 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;
}
答案 0 :(得分:1)
在分配之前你正在使用head。这完全是undefined behaviour。在系统上它没有崩溃它只是“运气”,它不是崩溃,但它仍然不起作用。你必须首先分配头
ListNode *head;
head = new ListNode(0);
// head->val=0; not neccessary
// do some stuff
// delete head;
在您必须删除队列中的所有之后(就像在循环中分配它们一样)。
答案 1 :(得分:0)
此代码
ListNode *head;
head->val=0;
无效。你没有为ListNode分配内存。所以你不能写head-&gt; val = 0;
答案 2 :(得分:0)
该行
head->val=0;
访问一个对象头应该指向的成员变量val,但是head还没有指向任何对象。