[問題] 今天遇到的一個問題~~

看板C_and_CPP (C/C++)作者 (星空下的鮪魚)時間16年前 (2009/04/13 16:33), 編輯推噓4(4010)
留言14則, 5人參與, 最新討論串1/1
我做了一個 super class叫做 class A 其中A1 和A2 都是他的sub class 而其中有個 function void foo() 在 class A中是宣告成 virtual void foo () = 0; 也就是pure virtual function 在A1和A2實作了這個 virtual void foo() 接著就是讓程式一直亂跑,瘋狂的new 和delete … 然後出現了一個錯誤訊息… 大意就是 foo() 是個 pure virtual funcion,不能執行,所以發生錯誤。 可是從頭到尾都是new A1或是A2,因為 A裡面有pure virtual function的關係 new出來也不能用。除了在管理記憶體時用了A的指標來管理多型的物件。 想問的是,什麼原因造成這樣的結果? 我能想到的是存取了不明的記憶體…但個人覺得這個可能性還蠻小的。 因為如果存取到不明的記憶體的話,不可能會進入foo這個function, 應該更早之前就爛了,而且發生segmentation fault之類的訊息 在管理記憶體上是用了map<UINT64, A*> 所以…這跟STL不適合存指標有關係嗎? -- 「當我真心追尋著我的夢想時,每一天都是繽紛的。 因為我知道每一個小時都是在實現夢想的一部分, 當我真實地在追尋著時,一路上我都會發現從未想像過的東西, 如果當初我沒有勇氣去嘗試看來幾乎不可能的事,如今我就還只是個牧羊人而已。」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.59.242

04/13 16:40, , 1F
然我不懂這麼高深的東西但我想問 class中含有pure virtual
04/13 16:40, 1F

04/13 16:41, , 2F
可以new東西嘛?
04/13 16:41, 2F

04/13 16:47, , 3F
我好想搞錯了@@ 抱歉
04/13 16:47, 3F

04/13 17:35, , 4F
用gdb或者vc++來偵測一下stack frame吧 看是怎樣爆
04/13 17:35, 4F

04/13 17:35, , 5F
STL沒有不適合存指標這回事...反而是存實體才要注意
04/13 17:35, 5F

04/13 17:35, , 6F
是否有自己實做deep copy的部份 存指標是很正常的阿
04/13 17:35, 6F

04/13 17:51, , 7F
會不會是因為在建構子或者解構子叫用而發生的錯誤 ?
04/13 17:51, 7F

04/13 17:51, , 8F
也許那部份還沒完成 所以仍然是pure virtual的狀態
04/13 17:51, 8F

04/13 19:16, , 9F
不建議容器存指標的原因是在伸縮容器時很容易失去指標
04/13 19:16, 9F

04/13 19:17, , 10F
真正"不適合"放容器的是像auto_ptr這種
04/13 19:17, 10F

04/13 19:17, , 11F
沒有 copy 語意的物件
04/13 19:17, 11F

04/13 21:56, , 12F
謝謝大家的意見 我大概知道哪邊出問題了~~ 感謝~~
04/13 21:56, 12F

04/13 22:31, , 13F
想一想覺得應該像s大說的,解構子叫用的錯誤吧~~
04/13 22:31, 13F

04/13 22:32, , 14F
一個thread在解構,而另外一個thread呼叫了foo() Orz
04/13 22:32, 14F
文章代碼(AID): #19ulZGnm (C_and_CPP)
文章代碼(AID): #19ulZGnm (C_and_CPP)