2011-10-14 91 views
0

在運行時關閉我的程序時出現錯誤:「crt檢測到應用程序在堆緩衝區結束後寫入內存。」我通過析構函數將程序執行過程跟蹤到唯一ptr的刪除器,並在調用deleter函數時發生了錯誤。我想提到的另一個問題是,由於某些原因,唯一ptr所在的類defenition要求它具有公共拷貝構造函數。我嘗試在另一個具有不同類和相同項目的項目中複製這些問題,刪除複製構造函數和析構函數並更改訪問實驗室。我無法複製相同的問題 - 這兩個項目之間最大的區別是存在問題的是共享庫,這是否會成爲問題?不得不定義複製構造函數,儘管煩人和多餘我不真正關心,任何關於這個內存錯誤的猜測或建議將不勝感激。unique_ptr deleter導致我的程序崩潰

+0

郵編,問的問題清單就更難回答。儘管您可以在網站上創建多個問題。 :) –

回答

3

crt detected that the application wrote to memory after end of heap buffer.

是的,當你調用刪除此消息出現,但它稱它發現一個錯誤。沒有造成一個。在代碼中的某處,您正在寫入數組的末尾,然後在刪除期間,內存管理器在超出範圍區域中找到「足跡」。

每個數組訪問,放在前:

assert(index<array_size); 
+0

謝謝先生,你一直很有幫助:) – Steve

+0

哇,每次我發佈這樣的答案答覆一直是「這是太多的工作!」另一種方法是使用'std :: vector'而不是裸數組,並且它應該爲您捕獲邊界錯誤。 –