gpt4 book ai didi

c - 根据 C 中声明的顺序释放结构体元素时出错

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

我有以下结构:

typedef struct {
char* json;
char* jsonBody;
char* tokens;
int max_json_size;
int max_num_tokens;
int num_tokens;
} JsonResponse;

如果我执行以下代码,一切都会按预期进行:

JsonResponse* self = malloc(sizeof(self));
self->tokens = malloc(sizeof(self->tokens)*1024);
free(self->tokens);
free(self);

但是当我在 *tokens 下面分配变量时,在这种情况下 *max_json_size 代码就会崩溃,因此例如此代码会崩溃:

JsonResponse* self = malloc(sizeof(self));
self->tokens = malloc(sizeof(self->tokens)*1024);
self->max_json_size = 1024;
free(self->tokens); //crash here
free(self);

这只发生在结构中位于 *tokens 指针正下方的变量上,因此在该示例中分配变量 num_tokens 效果很好。如果我将 *tokens 移动到结构的底部,一切似乎也工作正常,但我担心它可能是一个定时炸弹。我考虑过在中间放一个“padding”int,这可能也能解决问题。

但是我想知道我在这段代码中做错了什么,任何帮助将不胜感激,我一无所知。到底是怎么回事?

这正在任天堂 3ds 系统上进行编程,以防相关。

最佳答案

您分配的大小错误。

JsonResponse* self = malloc(sizeof(self));

您分配指针的大小而不是缓冲区的大小......

关于c - 根据 C 中声明的顺序释放结构体元素时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817169/

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