0
,我有以下結構鏈表malloc的內存泄漏
typedef struct Body
{
struct Body *next;
struct Body *prev;
SDL_Rect value;
} Body;
我要分配身體的一個新的部分具有以下
void init_body(Body **out_body, SDL_Rect *rect, Body *prev)
{
struct Body* new_body = malloc(sizeof(struct Body));
new_body->next = NULL;
new_body->prev = prev;
new_body->value = *rect;
*out_body = new_body;
}
但是(我是在Windows上)內存博士正在作出以下投訴:
Error #1: LEAK 24 direct bytes 0x02901b08-0x02901b20 + 0 indirect bytes
# 0 replace_malloc [d:\drmemory_package\common\alloc_replace.c:2292]
# 1 init_body [E:/Development/Projects/RipTide/main.c:61]
# 2 create [E:/Development/Projects/RipTide/main.c:75]
# 3 SDL_main [E:/Development/Projects/RipTide/main.c:213]
# 4 console_main [../src/main/windows/SDL_windows_main.c:140]
# 5 [email protected] [../src/main/windows/SDL_windows_main.c:177]
# 6 main [E:/Development/Projects/RipTide/main.c:263]
我該如何去清理這個內存泄漏?
而對於科瑞
void create(SDL_Renderer *renderer, Snake *snake) {
SDL_Rect r = SDL_CreateRect(10, 10, 100, 100);
snake->size = 1;
snake_init_body(&snake->body, &r, NULL);
snake->surf = SDL_CreateRGBSurface(0, 10, 10, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF);
SDL_FillRect(snake->surf, NULL, 0xAAAAAAFF);
snake->texture = SDL_CreateTextureFromSurface(renderer, snake->surf);
}
邏輯
DOH最終需要稍後釋放(和我從來沒有):
void snake_free(Snake *snake)
{
struct Body *abody = snake->body;
while (abody != NULL)
{
if (abody->next == NULL)
{
free(abody);
break;
}
else
{
abody = abody->next;
}
if (abody != NULL)
free(abody->prev);
}
}
DOH!你是對的:)我會用我的邏輯更新我的答案以釋放蛇。謝謝。 –
不客氣:) –