2012-05-03 15 views
3

我在Ubuntu 12.04上使用Valgrind插件運行Eclipse IDE。我一直在用C++開發一款遊戲已經有相當長的一段時間了,我似乎在某個地方出現了內存錯誤。通常情況下,我會跟Valgrind跟蹤這些。但是,當我運行valgrind時,glut無法初始化。我應該注意到,當我不使用valgrind時,遊戲初始化時沒有問題。我的主要功能的代碼如下:freeglut未能用valgrind打開顯示

int main(int argc, char** argv) { 
    char windowTitle[12] = "Game Window"; 
    printf("Initializing Glut...\n"); 
    glutInit(&argc, argv); 
    printf("Glut initialized!\n"); 
    alutInit(&argc, argv); 
    Game_Object* game = new Game_Object(windowTitle, 1200, 675, argc, argv); 
    delete game; 
    printf("game ended\n"); 
    return 0; 
} 

結果輸出到控制檯:

Initializing Glut 
freeglut (/home/dsnettleton/Documents/Programming/Eclipse/workspace/Plutoids/Debug/Plutoids): failed to open display '' 

顯然,該方案沒有得到很遠的valgrind與運行。 在我的發展的最後階段真的令人沮喪,只是試圖消除內存錯誤而陷入困境。什麼可能會導致初始化過剩,我該怎麼辦才能解決問題?

+0

不是一個真正的回答你的問題,但:你有沒有嘗試使用垃圾收集器,像Boehm_CG內存調試。 Mozilla使用它來達到這個目的。 http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html – datenwolf

+0

我試過了,但它沒有給我任何額外的輸出到控制檯。我不認爲這個問題本身就是一個漏洞;它可能與無效指針有關,或者可能在某處釋放某些內存(每次偶爾當我結束程序時,它會因損壞的雙鏈表消息而崩潰)。 – dsnettleton

回答

5

這是我的猜測:您的IDE可能缺少$DISPLAY環境變量。在啓動Valgrind之前,必須在某處配置環境以設置$DISPLAY

啓動終端和echo $DISPLAY。其價值可能是:0.0。在最壞的情況下,我會嘗試在C代碼中使用setenv(),或者在啓動Valgrind的命令行中設置DISPLAY(這些案例都未經過測試,它們可能不起作用)。

+0

就是這樣。我必須將參數'-DISPLAY =:0.0'添加到valgrind中。非常感謝;我正在拉我的頭髮。 – dsnettleton

1

此外,您還必須在Eclipse中添加此環境變量DISPLAY:= 0.0。 在可執行文件的啓動配置中,將一個Display變量添加到Environment選項卡,或者選擇繼承環境。

運行 - > RunConfiguration ...->環境

現在單擊新建

,並添加

DISPLAY:0

+0

聰明。謝謝。 添加具有以下功能的新變量: 變量:DISPLAY:0 VALUE:{leave empty} – amirkavyan