gpt4 book ai didi

c - C 中二维数组的内存分配

转载 作者:行者123 更新时间:2023-12-02 08:55:57 25 4
gpt4 key购买 nike

我使用以下结构来创建我的代码:

struct Mtrx {
unsigned double h;
struct MtrxRows** mtrxrows;
}
struct MtrxRows {
unsigned double w;
double* row;
}

我正在尝试创建一个名为 mtrxCreate 的方法,该方法接受参数高度和宽度,这就是我所拥有的:

Mtrx* mtrxCreate(unsigned double height, unsigned double width){
Mtrx* mtrx_ptr = malloc(sizeof(double)*height);
int i;
mtrx_ptr->mtrxrows = malloc(sizeof(double)*height);
for(i = 0; i < height; ++i){
mtrx_ptr->mtrxrows[i]->row = malloc(sizeof(double) * width);
mtrx_ptr->mtrxrows[i]->w = width;
}
mtrx_ptr->h = height;
return mtrx_ptr;
}

GCC 编译器告诉我存在段错误,因此我相信我没有正确分配内存。我不确定我仍然需要分配什么内存,如果我将当前数量分配给上面矩阵的部分,我们将不胜感激!

最佳答案

您没有为某些事情分配正确的内存量。首先,Mtrx 结构本身:

Mtrx* mtrx_ptr = malloc(sizeof(double)*height);

应该是:

Mtrx* mtrx_ptr = malloc(sizeof(struct Mtrx));

接下来,我不确定为什么您的 mtrxrows 字段是双指针。我认为它应该是一个指针,一个一维行数组(其中每行也有一定数量的元素)。如果将其更改为单个指针,则将按如下方式分配行:

mtrx_ptr->mtrxrows = malloc(sizeof(struct MtrxRows)*height);

编辑:抱歉,我一直注意到此示例中的内容,因此我对答案进行了一些调整。

关于c - C 中二维数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4871688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com