2014-01-23 48 views
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); 
    } 
} 

回答

2

你在某個時候經歷,並在釋放的每個節點清單?

+0

DOH!你是對的:)我會用我的邏輯更新我的答案以釋放蛇。謝謝。 –

+0

不客氣:) –