gpt4 book ai didi

无法释放从函数返回的 typedef 结构

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:57 26 4
gpt4 key购买 nike

我遇到了一个问题,这无疑是由于我的想法有缺陷,但我似乎无法解决这个问题。我有一个像这样的结构:

typedef struct
{
ALLEGRO_BITMAP *bitmap;
char name[255];
signed int step; // How many frames to move per cycle. Negative values will cause the animation to reverse. Affects "current" frame only.
ANNE_SPRITE_CYCLES cycles;
ANNE_SPRITE_ANIMATIONS anim;
ANNE_SPRITE_FRAME current;
} ANNE_SPRITE;

如果我 malloc() 然后立即释放它,一切正常:

ANNE_SPRITE *sprite = malloc(sizeof(ANNE_SPRITE));
free(sprite);
printf("Haven't crashed yet, boss!");

但是,如果我在函数内部构建结构,如下所示:

ANNE_SPRITE anne_sprite_load(char sprite_name[]){
ANNE_SPRITE *sprite = malloc(sizeof(ANNE_SPRITE));
//Snipped: a bunch of code to populate the struct with data
return *sprite;
}

然后我不能在调用上下文中为爱情或金钱解除分配结构:

ANNE_SPRITE test = anne_sprite_load("awesome_sprite");
free(test);

这会产生编译器错误 - 事实上,我正在将“ANNE_SPRITE”传递给不兼容类型“void *”的参数 - 但我不知道如何处理这个变量转换为 free() 准备使用的格式。

最佳答案

您的第二个示例返回 ANNE_SPRITE(即结构,而不是指针)。您应该将签名更改为 ANNE_SPRITE* anne_sprite_load(char sprite_name[]) 并调整 return 语句

关于无法释放从函数返回的 typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19803857/

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