0
我使用了一個原始代碼片段,並對其進行了測試。原來的形式下面以下幾點:帶有代碼段的分段錯誤的起源
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,j;
int size_x = 100;
int size_y = 100;
int size_z = 100;
double ***x;
x = malloc(size_y * sizeof(*x));
for (i = 0; i < size_y; i++)
x[i] = malloc(size_x * sizeof(**x));
for (j = 0; j < size_x; j++)
x[i][j] = malloc(size_z * sizeof(***x));
return 0;
}
在執行中,我得到一個Segmentation error
,我沒有在那裏此錯誤可能來自。
有人可以看到這個錯誤的原因?i
指數等於第一循環之後size_y-1
,第二循環似乎是正確的......
gdb
給人以backtrace
:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005b6 in main() at main_Syntax_Alloc_SEGFAULT.c:17
17 x[i][j] = malloc(size_z * sizeof(***x));
以來,我就糾正此代碼段有一個正確的分配,通過做:
double ***x;
x = malloc(size_y * sizeof(*x));
for (i = 0; i < size_y; i++)
{
x[i] = malloc(size_x * sizeof(**x));
for (j = 0; j < size_x; j++)
x[i][j] = malloc(size_z * sizeof(***x));
}
但我想知道上面的代碼段的第一個版本的分段錯誤的起源。
歡迎任何幫助,感謝
'x [i] [j] = malloc(size_z * sizeof(*** x));'問這個:那條線上'i'的值是多少? – kaylum
,'i'等於'size_y-1',不是嗎? – youpilat13
當'i
LPs