2013-09-29 44 views
0

我想創建一個基於自定義向量的通用隊列類。我的代碼運行良好,它輸出我想給它輸入的所有內容,並且不會崩潰。但是,如果我把我的queue.pop(),我碰到下面的程序執行完畢後:自定義隊列中的C++錯誤:被釋放的指針未被分配

a.out(6878) malloc: *** error for object 0x7fb210403981: pointer being freed was not allocated 

我的矢量圍繞T類型的陣列建立,宣告T * typeArray;。所有queue.pop()確實是從我的矢量vector.pop_front()調用函數。似乎是導致問題的線路是

// Assign the pointer to the second position in the array. 
typeArray = &typeArray[1]; 

我在做什麼錯?爲什麼這不起作用?謝謝!

+4

您沒有顯示足夠的代碼。顯示您的通用隊列類。而'std :: deque'有什麼問題?編譯所有的警告和調試信息('g ++ -Wall -g'),學會使用'gdb'調試器和[valgrind](http://valgrind.org/) –

+0

如果沒有一些說明就不可能回答這個問題碼。但是,作爲一邊,我會建議使用'std :: deque'而不是'std :: vector'。去除矢量前面的元素效率不高。如果你看看'std :: queue',默認情況下它使用'std :: deque'。 – juanchopanza

+1

您的代碼無法正常工作,您希望從**一行**代碼中獲得診斷結果?我想這個問題正是錯誤信息所說的。您釋放的指針與您分配的指針不同,因爲您正在pop_front中增加該指針。我也懷疑你的代碼有更多的問題比你意識到的多(也許這就是你不願意發佈它的原因)。但是再次缺少更多的代碼只是猜測。 – john

回答

0

只允許delete指針返回給您new(同樣的原則適用於mallocfree)。

一旦你替換

typeArray = &typeArray[1]; 

原來的指針是一個錯誤

delete [] typeArray; 

你需要保持獨立的指針分配存儲和隊列的頭。

+0

謝謝!我非常感謝幫助。 – Seminole0ne

相關問題