我在C代码中发现了一个段错误,并且在搜索后找不到一个好的解释或解决方案。导致段错误的int指针的动态数组
这第一个代码给我打印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;
}
这些只是例子,不是我的实际代码。我也试过做指针算术,但结果相同。 有人能解释一下吗?谢谢。
'* defs [i]'。在这之前,你需要初始化'defs [i]'指向某处。 –
指针必须指向某个地方才能被取消引用 –