gpt4 book ai didi

结构体的C动态 vector

转载 作者:行者123 更新时间:2023-11-30 21:24:34 25 4
gpt4 key购买 nike

我有以下动态 vector 结构:

typedef struct {
TElement *data;
int len;
}Vector;

还有 2 个函数,一个用于初始化 vector ,另一个用于附加元素:

Vector *initVector()
{
Vector *v;
v = malloc(sizeof(TElement));
v->len = 0;
return v;
}
void append(Vector *v, TElement element)
{
v = (Vector *)realloc(v, (v->len + 1) * sizeof(TElement));
v->data[v->len++] = element;
}

当我尝试附加一个元素时,程序崩溃了,我不知道为什么,有什么想法吗?

最佳答案

在您的代码中,v 的类型为 Vector *,并且您按照 TElement 的大小分配内存,即错了。

改变

v = malloc(sizeof(TElement));

v = malloc(sizeof*v);

也就是说,

  • 始终通过检查返回的指针是否为 NULL 来检查 malloc() 是否成功,以避免在 malloc() 失败时出现任何可能的 UB。

  • p = realloc(p,...) 风格非常糟糕,因为如果 realloc() 失败,你最终会失败实际的指针也是如此。在临时指针中捕获 realloc() 的返回值,检查 NULL 是否成功,然后分配回原始指针。

关于结构体的C动态 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828752/

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