2012-07-03 85 views
2

初始化我的deque或向量時,出現奇怪的錯誤。我正在使用QtCreator和一個CMake項目。向量和deque初始化或push_back導致SIGABRT錯誤

如果我使用一個雙端隊列,它將中止對初始化:

std::deque<int> myValues; // <-- abort here 

for (int i=0;i<10;++i) 
{ 
    myValues.push_back(i); 
} 

當我使用雙端隊列,它將中止上的push_back:

std::vector<int> myValues; 

for (int i=0;i<10;++i) 
{ 
    myValues.push_back(i); // <-- abort here 
} 

我無法找出爲什麼這種情況正在發生(它一直以這種方式工作)。這兩種異常都發生在_gnu_cxx :: new_allocator中< int> :: allocate。

任何提示?

感謝您的努力提前!

哈特穆特

+0

分配內存似乎有些魚腥味。一個'malloc' /'free'工作,還是他們也提出SIGABRT?我的猜測是,由這些功能完成的glibc內部簿記已經搞亂了。嘗試在你的應用程序上運行Valgrind,也許它可以揭示一些光芒。 –

+0

您必須在程序的其他地方調用一些未定義的行爲。檢查您是否正在執行諸如訪問超出內存位置等內容。 – juanchopanza

回答

1

它看起來像在你的程序在其他地方堆損壞。也就是說,你寫出界限或在某處刪除無效指針。一旦堆內部結構損壞,大量的分配可能會導致程序崩潰。

+0

謝謝。取消註釋命名空間的其他一些函數(這不會導致任何錯誤)後,它會通過。 – hardmooth

+0

@hartmooth那些函數導致錯誤(即堆損壞),他們只是沒有引起明顯的和容易修復錯誤。 – sashoalm