我在我的C代码中发现了一个分段错误,在搜索后找不到合适的解释或解决方案。
第一个代码在打印0后给出了分段错误。
#include <stdlib.h>
#include <stdio.h>
int main() {
int **defs = malloc(16 * sizeof *defs);
int i;
for (i = 0; i < 16; i++) {
printf("%d\n", i);
*defs[i] = i;
}
free(defs);
return 0;
}
这第二个代码工作正常。
#include <stdlib.h>
#include <stdio.h>
int main() {
int *defs = malloc(16 * sizeof defs);
int i;
for (i = 0; i < 16; i++) {
printf("%d\n", i);
defs[i] = i;
}
free(defs);
return 0;
}
这些只是示例,而不是我的实际代码。我也尝试过做指针运算但结果相同。 有人可以解释一下吗?谢谢。
答案 0 :(得分:4)
在第一个代码中,您尚未分配每个int*
内存块。
因此,在将值分配给defs[i]
之前,必须使用int*
类型的内存填充它。
defs[i] = (int*)malloc(sizeof(int) * number_of_elements);
然后defs[i][some_index] = value
。