[問題] std::string配置記憶體
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Visual Studio 2010
問題(Question):
我把跟問題無關的 code 刪除後如下:
http://codepad.org/BdGcERZD
我有兩個 class 分別是 A 以及 B
B 裡面的 private member 只有一個 std::string 的變數
A 則是有一個 pointer 指向 B
我在 A 的 Constructor 內動態配置了記憶體,
所以有一個動態大小的陣列,是由 class B 構成。
我的疑問在於如果把中斷點放在第 22 行 _length = length;
我就可以發現在前一行配置完記憶體後,顯示錯誤如下:
名稱 值
_ptr 0x004a1368{_name=<錯誤 Ptr>}
_name <錯誤 Ptr>
所以之後如果我如果要存取他的值,就會有如下的錯誤訊息:
「於 0x0f46cafa (msvcr100d.dll) 的 teststring.exe 中發生未處理的例外狀況:
0xC0000005: 寫入位置 0xcdcdcdcd 時發生存取違規」
並且還會跳出 memcpy.asm 的檔案出來,
而我如果用 printf 的 %x 把 _name 的值印出來,則是會顯示 cdcdcdcd。
我以前用 std::string 都只用其中一些函數 find、substr...等等的,
第一次遇到這種情形,不曉得這是哪裡出錯了呢?
在此請教各位前輩,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.158.87
推
12/12 23:09, , 1F
12/12 23:09, 1F
→
12/12 23:10, , 2F
12/12 23:10, 2F
→
12/12 23:11, , 3F
12/12 23:11, 3F
→
12/12 23:11, , 4F
12/12 23:11, 4F
→
12/12 23:11, , 5F
12/12 23:11, 5F
→
12/12 23:17, , 6F
12/12 23:17, 6F
→
12/12 23:17, , 7F
12/12 23:17, 7F
→
12/12 23:17, , 8F
12/12 23:17, 8F
→
12/12 23:18, , 9F
12/12 23:18, 9F
→
12/12 23:18, , 10F
12/12 23:18, 10F
推
12/12 23:19, , 11F
12/12 23:19, 11F
→
12/12 23:21, , 12F
12/12 23:21, 12F
→
12/12 23:27, , 13F
12/12 23:27, 13F
→
12/12 23:50, , 14F
12/12 23:50, 14F
推
12/13 00:00, , 15F
12/13 00:00, 15F
→
12/13 00:01, , 16F
12/13 00:01, 16F
→
12/13 00:14, , 17F
12/13 00:14, 17F
→
12/13 03:48, , 18F
12/13 03:48, 18F
推
12/13 09:14, , 19F
12/13 09:14, 19F