2013-04-29 57 views
0

嘗試在C++中創建對象時,我遇到了一個奇怪的總線錯誤。這是我的GDB回溯程序崩潰時:嘗試在C++中創建新對象時發生總線錯誤

#0 0xff146ff4 in _malloc_unlocked() from /usr/lib/libc.so.1 
#1 0xff146e40 in malloc() from /usr/lib/libc.so.1 
#2 0x24430 in __builtin_new (sz=128) at /usr/local/src/gcc-2.95.1/gcc/cp/new1.cc:84 
#3 0x1e71c in FileHeader::Allocate (this=0x3f5d8, freeMap=0x3eea0, fileSize=5719) 
    at ../filesys/filehdr.cc:63 
#4 0x1f61c in FileSystem::Create (this=0x3d8b8, name=0xffbff8f3 "test", initialSize=5719) 
    at ../filesys/filesys.cc:200 
#5 0x1ffac in Copy (from=0xffbff8e4 "assignment 2.c", to=0xffbff8f3 "test") 
    at ../filesys/fstest.cc:52 
#6 0x15150 in main (argc=3, argv=0xffbff768) at ../threads/main.cc:116 

的代碼filehdr.cc相關線上:

IndirectHeader * s; 
s = new IndirectHeader; 

它崩潰在第二行。我認爲這可能是因爲我沒有明確使用自己的構造函數,但添加一個似乎沒有幫助。在我看來,有一些其他簡單的問題,我沒有注意到,但我一直沒能找到它..任何意見,將不勝感激。

回答

2

你在回溯中看到的是一個崩潰分配內存來支持您的IndirectHeader。它甚至還沒有開始構建對象,因爲它仍然試圖爲它分配內存。在您的程序中,最有可能存在一個錯誤,它已經損壞了堆。

+0

如果您可以在Linux下運行,在valgrind下運行您的程序可以幫助您更輕鬆地查明損壞的來源。 – 2013-04-29 18:48:11

+0

不幸的是,這是爲我的操作系統類,我們的構建運行在solaris服務器上,我沒有權限安裝任何類似valgrind ..我嘗試在本地移動我的工作,但試圖重做一些make文件,這樣很痛苦。有沒有其他的技巧我可以嘗試找到腐敗? – scotthew1 2013-04-29 19:54:12

+0

是的,事實證明,我將值分配給過去的列表。我應該知道這很簡單。 – scotthew1 2013-05-01 06:28:52

相關問題