【发布时间】:2017-08-29 05:35:28
【问题描述】:
我使用了我进行测试的原始代码 sn-p。原始形式如下:
#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));
因为,我已经纠正了这个代码 sn-p 有一个正确的分配,通过这样做:
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));
}
但我想知道上面第一个版本的sn-p分段错误的根源。
欢迎任何帮助,谢谢
【问题讨论】:
-
x[i][j] = malloc(size_z * sizeof(***x));问这个问题:i那行的值是多少? -
在那一行,
i等于size_y-1,不是吗? -
以前的
for结束于i < size_y为false..... 所以......i=??? -
好的,
i=100在第一个循环结束时 -
别做三星级程序员....wiki.c2.com/?ThreeStarProgrammer
标签: c for-loop segmentation-fault gdb