2014-02-19 76 views
0

我已這種方式定義的動態數組:在一個循環中動態陣列

double *n_data ; 
int n_data_c = 0, n_cnt = 0; 
n_data_c = count_lines_of_file("abnorm"); 
n_data = (double *)malloc(n_data_c * sizeof(double)); 

我計算距離和要這樣做:

n_cnt++; 
n_data[n_cnt] = distance; 

但在這裏返回segmentation faultn_data[n_cnt] = distance;

我想知道我是否做錯了什麼。

+0

在C中,你不應該使用'malloc'結果(http://stackoverflow.com/a/605858/440558)。 –

+0

您的來源有很多錯誤。 – BLUEPIXY

回答

0

你超越你的數組緩衝區..

與n_data_c部N_Cnt比較,只訪問數組,如果部N_Cnt < n_data_c/

n_cnt++; 
if (n_cnt < n_data_c) 
{ 
n_data[n_cnt] = distance; 
} 
+0

不變,segfault再次。 – Mjina

+0

奇怪..你可以在循環中打印n_cnt和n_data_c到你的控制檯.. –

+0

'n_data_c'是7,因爲我的文件有7行,第一次迭代時'n_cnt'是1,然後它返回段錯誤。 – Mjina

3

檢查malloc返回什麼,如果它返回0,則失敗。我認爲更可能的是你的ncnt出界了。如果它是負數,或者大於或等於n_data_c,那麼你會得到一個段錯誤。

0

n_data_c = count_lines_of_file("abnorm");

這個正在生成分割故障。檢查n_data_c的值

+0

@G之一:我檢查了它,它返回7,因爲我的文件有7行。 – Mjina

+0

'int n_data_c = 7,n_cnt = 0; n_data =(double *)malloc(n_data_c * sizeof(double)); n_cnt ++; n_data [n_cnt] = 10;'我試過了,它沒有給我任何seg錯誤 printf(「%f」,n_data [n_cnt]); –

+0

@G之一:這是我的代碼:[鏈接](http://paste.org/70640) – Mjina

0

試着在mallocing之前打印n_data_c的值。

+0

我檢查了它,它返回7,因爲我的文件有7行。 – Mjina