分段错误(代码转储)

时间:2016-11-24 08:40:44

标签: c++ linux qt

我创建了两个文件,如下所述

csvreport.h

int flag = 0; //declared && defined

table.cpp

csvreport* csvreports;
csvreports->flag = 1;

显示分段错误(代码转储)
任何人都可以给它解决方案??

3 个答案:

答案 0 :(得分:5)

csvreport* csvreports;创建未初始化的指针。尝试使用未初始化的指针会导致未定义的行为。

在堆栈上创建此变量,不带指针:

csvreport csvreports;

或者,如果需要指针 - 首先分配它:

csvreport* csvreports = new csvreport;
csvreports->flag = 1;

或通过现代C ++ 11方式使用唯一指针:

auto csvreports = std::make_unique<csvreport>();
csvreports->flag = 1;

答案 1 :(得分:1)

您正在尝试使用已声明但未初始化为指向任何有效内容的指针来访问对象的成员。这是未定义行为的原因。

在尝试访问该类型的成员之前,首先为该对象分配内存。

csvreport* csvreports = new csvreport; // or new csvreport[array_size]
csvreports->flag = 1;

答案 2 :(得分:0)

在此代码中

csvreport* csvreports;
csvreports->flag = 1;

cvsreports刚被声明为指针;没有分配内存来指向它。