2011-02-07 11 views
2

可能性の重複を使用して検出:
Why does valgrind say basic SDL program is leaking memory?SDLメモリリークは、Valgrindは

だから私は小さなOpenGLアプリケーションを作成するにSDLをたくさん使用してきました。私は最近、私の記憶がどうなっているかをチェックすることに興味を持ちました(メモリリークを確実に防ぐためにできるだけ気をつけました)。 しかし私は自分のプログラムでSDLドライバを作成しました。私はコードを孤立させて、何か間違ったことをしているのか、それがSDLなのか、それともSDLのライブラリが使用しているのか分かりません(Valgrindの結果を参照)。

#include <SDL.h> 

int main() { 
    SDL_Surface* Screen; 
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { 
     return 1; 
    } 
    Screen = SDL_SetVideoMode(1280, 1024, 32, SDL_OPENGL); 
    SDL_FreeSurface(Screen); 
    SDL_Quit(); 
    return 0; 
} 

今、私は正確に1つの以上のセクションを分離することはできませんので、私は、それ自体で初期化のために、ここでのValgrindからの結果を掲示した後、プログラム全体のためでしょう。

if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { 
    return 1; 
} 

==7485== LEAK SUMMARY: 
==7485== definitely lost: 16 bytes in 1 blocks 
==7485== indirectly lost: 176 bytes in 4 blocks 
==7485==  possibly lost: 9,155 bytes in 14 blocks 
==7485== still reachable: 654,484 bytes in 1,484 blocks 

注:上記のコードの後に​​SDL_Quit()を使用して、さらにメモリリークを誘発するので、これは、(残念ながら)FIXありません。 は今、プログラム全体(最初のソースが掲載さ)(下に表示される前に、最初のエラーが数回繰り返される)のために:それは重要な場合

==7515== Invalid write of size 1 
==7515== at 0x4C29910: memcpy (mc_replace_strmem.c:497) 
==7515== by 0xB9BE0CF: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so) 
==7515== Address 0x7f42bca30fff is not stack'd, malloc'd or (recently) free'd 
==7515== 
==7515== More than 10000000 total errors detected. I'm not reporting any more. 
==7515== Final error counts will be inaccurate. Go fix your program! 
==7515== Rerun with --error-limit=no to disable this cutoff. Note 
==7515== that errors may occur in your program without prior warning from 
==7515== Valgrind, because errors are no longer being displayed. 
==7515== 
==7515== HEAP SUMMARY: 
==7515==  in use at exit: 4,539,966 bytes in 11,312 blocks 
==7515== total heap usage: 49,855 allocs, 38,543 frees, 40,485,815 bytes allocated 
==7515== 
==7515== LEAK SUMMARY: 
==7515== definitely lost: 79,981 bytes in 126 blocks 
==7515== indirectly lost: 30,480 bytes in 54 blocks 
==7515==  possibly lost: 3,374,770 bytes in 9,289 blocks 
==7515== still reachable: 1,054,735 bytes in 1,843 blocks 
==7515==   suppressed: 0 bytes in 0 blocks 
==7515== Rerun with --leak-check=full to see details of leaked memory 

私はUbuntuの10.10を使用しています。

2番目の注記。 (それが問題である包みなさい?)私はそうのようなValgrindのを使用しています:

valgrind ./main 

第三のメモを。 fglrxはUbuntu ATIドライバです。

+0

は常に登るあなたのメモリ使用量であるか、それだけで終了した後に未解放メモリを報告していますか? –

+0

この例では、私は後者のみを参照しています。終了後に未処理のメモリを報告します。別の状況ではメモリリークの可能性があります。 – dcousens

答えて

関連する問題