gpt4 book ai didi

c - 如何在结构中分配固定大小的二维数组?

转载 作者:行者123 更新时间:2023-12-04 09:34:40 25 4
gpt4 key购买 nike

我有一个看起来像这样的结构:

typedef struct _my_struct {
float first_vector[SOME_NUM][OTHER_NUM];
float second_vector[SOME_NUM][OTHER_NUM];
int some_val;
} my_struct;

我想做的事:

my_struct * thing = (my_struct *)malloc(sizeof(my_struct));

但是当我这样做然后尝试访问 vector 中的任何内容时,我遇到了段错误。

如果我改为将结构中的 vector 声明为:

typedef struct _my_struct {
float **first_vector;
float **second_vector;
int some_val;
} my_struct;

然后分配:

my_struct->first_vector = (float**)malloc(sizeof(float*) * SOME_NUM);
my_struct->second_vector = (float**)malloc(sizeof(float*) * SOME_NUM);
int i;
for (i = 0; i < SOME_NUM; i++){
my_struct->first_vector[i] = (float*)malloc(sizeof(float) * OTHER_NUM);
my_struct->second_vector[i] = (float*)malloc(sizeof(float) * OTHER_NUM);
}

然后一切正常。

由于第一个和第二个 vector 的大小是固定的并且在编译时已知,所以我必须单独为它们分配内存似乎很奇怪。有没有一种方法可以在结构中声明它们,这样我就可以 malloc 一个新的结构,而不必分别为每个 vector 分配内存?

最佳答案

你所拥有的应该没问题.. 除了顶部时髦的 typedef 和 my_struct * struct = malloc... 的奇怪声明之外,这个小测试用例对我有用:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
float first[10][20];
float second[10][20];
int val;
} my_struct;

int main(void) {
printf("Sizeof mystruct %d\n", sizeof(my_struct));

my_struct* str = malloc(sizeof(my_struct));
if(!str) {
printf("Memory allocation error!");
exit(1);
}

str->first[0][0] = 1;
str->second[1][19] = 15;

printf("values %f %f\n", str->first[0][0], str->second[1][19]);

free(str);

return 0;

}

输出是:

Sizeof mystruct 1604
values 1.000000 15.000000

此外,您不应该转换 malloc 的返回值。它可以隐藏重要的编译器警告。

关于c - 如何在结构中分配固定大小的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829591/

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