經過大量的挖掘和搜索,我發現了我的問題的根源。本質上這個代碼被執行,並且在它自己的項目中它會導致相同的錯誤。我發現我無法將智能指針重置爲新的字符串......但是爲什麼?還有一個簡單的方法呢?boost :: scoped_array上的_BLOCK_TYPE_IS_VALID錯誤:
scoped_array<char> sptr;
char* nptr = "Hello";
sptr.reset("");
sptr.reset(nptr);
編輯 -
我想我已經想通了。在重置時,智能指針試圖刪除並清空字符數組(「」),由於沒有使用新操作符,因此未分配到堆上(ahem !!?!!?!???!?!)。因此,當程序試圖釋放內存時,這個程序會崩潰。所以糾正我,如果我錯了,但字符串本身會存儲在程序的可執行字節流本身?如果是這樣,僅供將來參考,是否有強制分配新字符串的方法?