2016-11-24 32 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剛被聲明爲指針;沒有內存分配給它指向。