首页 > 解决方案 > 创建由`calloc`分配的多维数组指针或嵌套双指针

问题描述

我是 C 的新手,并试图理解指针和内存。我想创建一个由calloc. 但是我遇到了段错误。谁能指出我做错了什么?

尝试1:

struct line {
     struct dot *a;
};
struct data {
    struct line ***bold;
};
#define COUNT 16

void func (void)    {
    struct data *data = calloc(1, sizeof(*data));
    data->bold = calloc(COUNT * COUNT + 1, 4);

    for (size_t i = 0; i < COUNT; i++) {
        for (size_t j = 0; j < COUNT; j++) {
             data->bold[i][j]->a = i + j; //segfault here
        }
    }
}

尝试2:

struct line {
     struct dot **a;
};
struct data {
    struct line **bold;
};

void func (void)    {
    struct data *data = calloc(1, sizeof(*data));
    data->bold = calloc(COUNT + 1, 4);

    for (size_t i = 0; i < COUNT; i++) {
         data->bold[i]->a = calloc(COUNT + 1, 4); //segfault here
    }

    for (size_t i = 0; i < COUNT; i++) {
        for (size_t j = 0; j < COUNT; j++) {
             data->bold[i]->a[j] = i + j; 
        }
    }
}

在这里,我尝试创建一个嵌套的双指针calloc,我希望通过它可以给我与上述尝试类似的数据变量。但是,它也出现了段错误。为什么会发生此段错误,我该如何修复此代码?我的目标是在下面打印类似的内容并获得输出

printf("%d : %d\n", data->bold[2]->a[3], data->bold[2][3]->a);

标签: carrayspointersmultidimensional-arraystruct

解决方案


推荐阅读