C 初始化2d阵列时出现SEGFULT
我无法在这个简单的数组初始化中找到错误。 程序在C 初始化2d阵列时出现SEGFULT,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我无法在这个简单的数组初始化中找到错误。 程序在字段[x][y]=''上出现segfault时崩溃、x和y(我使用代码::块调试器) /*初始化数据结构*/ 字符**字段; int field_WITH=5,field_height=5; field=malloc(sizeof(char*)*字段宽度); 对于(x=0;x char*可能是演员吗?应该是这样吗 field = (char**)malloc(sizeof(char*)*field_width); 编辑 malloc可以返回nul
字段[x][y]=''上出现segfault时崩溃0处的代码>、x和y(我使用代码::块调试器)
/*初始化数据结构*/
字符**字段;
int field_WITH=5,field_height=5;
field=malloc(sizeof(char*)*字段宽度);
对于(x=0;x
char*
可能是演员吗?应该是这样吗
field = (char**)malloc(sizeof(char*)*field_width);
编辑
malloc
可以返回null,因此检查field[x]=malloc(sizeof(char)*field\u height)是值得的
内存块有效。我实际上简化了代码段。字段宽度
没有初始化。我很惊讶这在生成过程中没有发出警告。我真的不知道为什么当x=0时它会生成segfault
但是我的问题已经解决了。谢谢大家,很抱歉这么简单…在初始化字段宽度之前,它可能包含随机数据。然后在malloc
语句中使用field\u width
。编译器可以做任何它想做的事情,从跳过malloc
到使用任何垃圾碰巧存储在field\u width
,或者更糟的/奇怪的东西中。无论如何,如果调用未运行或返回NULL
(例如field\u width
包含的值太大而无法malloc
ed),则不太可能获得所需的malloc
调用当C++中的代码错误>代码>字段>代码>时,它不太可能指向有效内存。当循环引用中的代码< >代码>字段>代码时,这会导致一个StError。不需要显式地从void*
转换到C.in(ANSI)中的另一个指针C,不需要抛出Maloc的结果。参见不像C++,您不需要从“代码>空白”*/CODE显式地转换到C.中的另一个指针,它没有初始化的<代码>字段宽度> /COD>,这可能发生了很大的值,因此<代码> MalOC/<代码>失败。l代码?我没有检查。按照你的建议我检查了,事实上,这就是失败的原因。谢谢你的建议。我必须记住另一个好习惯!
field = (char*) malloc(sizeof(char*)*field_width);
field = (char**)malloc(sizeof(char*)*field_width);