动态的int指针数组导致分段错误

时间:2016-09-20 04:32:51

标签: c segmentation-fault

我在我的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;
}

这些只是示例,而不是我的实际代码。我也尝试过做指针运算但结果相同。 有人可以解释一下吗?谢谢。

1 个答案:

答案 0 :(得分:4)

在第一个代码中,您尚未分配每个int*内存块。 因此,在将值分配给defs[i]之前,必须使用int*类型的内存填充它。

defs[i] = (int*)malloc(sizeof(int) * number_of_elements);

然后defs[i][some_index] = value