2016-11-24 84 views
-1

创建下面
分段错误(代码转储)

csvreport.h

int flag = 0; //declared && defined 

table.cpp

csvreport* csvreports; 
csvreports->flag = 1; 

它显示段故障(代码转储) 描述两个文件
任何人都可以给它解决?

+1

请提供一个mcve:http://stackoverflow.com/help/mcve – Jonas

回答

5

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

无论创建堆栈此变量,而无需指针:

csvreport csvreports; 

,或者在情况下,如果需要的指针 - 第一分配它:

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

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

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

未定义引用'CSVReports :: CSVReports()' –

+0

@GirdhariLal,我的例子假设,你有默认的构造函数。如果不是这种情况 - 为构造函数提供必要的参数,或者定义默认的参数。 – Starl1ght

1

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

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

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

对CSVReports :: CSVReports()'的未定义引用 –

+2

@GirdhariLal,这是一个完全不同的问题。用[mcve]创建另一篇文章。 –

+0

我用你的解决方案,然后它显示这个错误:未定义的引用'CSVReports :: CSVReports()'@ R Sahu –

0

在这段代码

csvreport* csvreports; 
csvreports->flag = 1; 

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