我有以下代码。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 还没有指向任何对象。