Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 代码段分段错误的来源_C_For Loop_Segmentation Fault_Gdb - Fatal编程技术网

C 代码段分段错误的来源

C 代码段分段错误的来源,c,for-loop,segmentation-fault,gdb,C,For Loop,Segmentation Fault,Gdb,我使用了一个原始的代码片段来进行测试。原始表格如下: #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++)

我使用了一个原始的代码片段来进行测试。原始表格如下:

#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;

}
此后,我通过执行以下操作更正了此代码段以获得正确的分配:

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));
 }
double***x;
x=malloc(尺寸y*sizeof(*x));
对于(i=0;i
但是我想知道上面代码片段的第一个版本的分段错误的来源

欢迎任何帮助,谢谢

i
索引等于第一个循环后的
size_y-1

不,不是。如果是这样的话,循环还没有结束

循环后

for (i = 0; i < size_y; i++)
访问无效内存,调用未定义的行为。从那时起,任何事情都可能发生

循环之后的
i
的一个简单
printf()
将证明这一点



顺便说一句,所有这些
int
s应该是
size\u t
s.

x[i][j]=malloc(size\u z*sizeof(***x))
问这个问题:那一行的
i
值是多少?在那一行,
i
等于
size\u y-1
,不是吗?前面的
for
i
false
时结束。。。。。所以……
i=???
ok,
i=100
在第一个循环结束时,不要成为一名三星级程序员。。。。
for (i = 0; i < size_y; i++)
x[i][j] =  ...