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] = ...