gpt4 book ai didi

c - 访问动态分配的 C 结构数组时出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:45:57 26 4
gpt4 key购买 nike

我有以下结构,按以下方式定义

typedef struct _abcd {
int a;
unsigned long b;
void (*c)(int);
int d;
} abcd_t, *abcd;

现在我有以下代码

static abcd foo

int set_size(int size){
foo = malloc(sizeof(abcd) * size);
}

由于某种原因,此代码在访问数组成员的某些属性时出现段错误。但我注意到,如果我将 malloc 行更改为以下内容 - 它可以解决问题

foo = malloc(sizeof(foo[0]) * size);

我发现这显然很奇怪sizeof(foo[0]) = sizeof(abcd)那么这里到底有什么区别呢?

谢谢

最佳答案

obviously sizeof(foo[0]) = sizeof(abcd)

自从您 typedefabcd 编辑为指向 struct _abcd 的 *指针* 以来,情况就不一样了。

使用

foo = malloc(sizeof(*foo) * size);

即使 foo 的类型在某个时刻发生变化,也能拥有健壮的代码。

你的

foo = malloc(sizeof(foo[0]) * size);

本质上是相同的,因为foo[0]只是*(foo + 0)的语法糖,它变成了*foo

关于c - 访问动态分配的 C 结构数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53310928/

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