我有以下代碼:分段故障與二維數組
#define MAXSAMPLES 1024
typedef int sample_t;
typedef sample_t sub_band_t[MAXSAMPLES][MAXSAMPLES];
void blah(sample_t a[][MAXSAMPLES], int u0, int v0, int u1, int v1) {
. . . .
}
int main(int argc, char *argv[]) {
sub_band_t in_data;
int k =0;
if (argc < 2) {
printf("\nInput filename required\n");
return 0;
}
FILE *input_file = fopen(argv[1], "r");
char del = '\0';
int i = 0, j = 0;
int cols = 0;
sample_t x;
while (! feof(input_file)) {
if (fscanf(input_file, "%d%c", &x, &del) != 2) {
i--;
break;
}
in_data[i][j] = x;
if (del == '\n') {
i++;
j =0;
continue;
}
j++;
cols = j > cols ? j : cols;
x = 0;
}
blah(in_data, 0, 0, i, cols);
}
當我用10點* 10點的整數輸入文件中運行這個程序,我得到了blah
函數調用分段錯誤主要。我不能也收集有關分段錯誤用gdb的任何信息,它只是說:
0x0000000000400928 in blah (a=Cannot access memory at address 0x7ffffdbfe198) at blah.c
我在做什麼錯在這裏?任何幫助將不勝感激。
如果崩潰的原因是來自blah函數,那麼爲什麼你不把它的代碼? – MOHAMED 2013-03-25 10:38:00
'blah'中的哪條線導致崩潰?你在那兒做什麼?你改變'a'來指向別的嗎? – 2013-03-25 10:41:50
崩潰發生在函數初始化之前,就在原型行。早些時候函數是可以的,但是我改變它將一個二維數組作爲參數,而不是雙指針。我猜測這個問題只與此有關,但不能指出。 – Dronacharya 2013-03-25 10:43:16