分段错误发生在某些编译器中,但未发生在其他编译器中
segmentation fault happened in some compiler but not others
我有以下代码。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 还没有指向任何对象。
相关文章:
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- msvc 编译器(和其他编译器)如何知道要绑定到哪个 std 重载?
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 为什么在某些编译器中可以声明像int myarr[noconstant]这样的数组;而不是在其他编译器中?
- 使用其他编译器编译QT代码
- 将 somedialog.h 包含在项目的其他部分中会使编译器看不到 ui_somedialog.h
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- VS说"Too few arguments...",但其他编译器给了我正确的输出?
- 我的电脑不接受 s.length,但其他编译器可以
- 升级 gcc 编译器/其他修复程序以向后兼容
- 在其他编译器中使用_DEBUG定义,然后在Visual Studio中使用
- 为什么这C++代码使用某些编译器编译,而不能使用其他编译器编译?
- 成员函数模板推演指南或其他方法让编译器知道如何调用函数
- 如何在VS 2017中编译来自其他编译器的代码
- complex.h 适用于 Win32 目标以外的其他编译器,例如代码编辑器工作室 (CCS)
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性
- 使用与其他源不同的编译器增强编译
- 用Mac OS X上的其他编译器使用不同的编译器进行建筑提升