[問題] 程式執行後會有access violation

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/12/08 21:49), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
IDE: BCB 問題: 程式執行後會有access violation, 判斷應該是由於程式中CScenePoint tmp0(w,h)以及arr.push_back(tmp0)皆會執行解構子 因此我有另外對 CScenePoint& CScenePoint::operator=(const CScenePoint &) 進行overwrite,但沒有用...想請問各位,是否能給些提示告訴我應該加什麼。 謝謝! 程式碼如下: //--------------------------------------------------------------------------- #include <vector> #pragma hdrstop using namespace std; //--------------------------------------------------------------------------- #pragma argsused //--------------------------------------------------------------------------- class CScenePoint { public: CScenePoint(): m_width(0), m_height(0), m_bits(16), m_data(NULL) {}; CScenePoint(int w, int h): m_bits(16) { m_width = w; m_height = h; m_data = (int*)malloc(sizeof(int)*m_width*m_width*m_bits); } ~CScenePoint() { if(m_data) free(m_data); m_data = NULL; } private: int m_width, m_height, m_bits; int *m_data; }; //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { vector<CScenePoint> arr(1); int w = 1392, h = 1040; CScenePoint tmp0(w,h); arr.push_back(tmp0); return 0; } //--------------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.40.70

12/08 23:35, , 1F
tmp0.m_data被free兩次囉
12/08 23:35, 1F

12/09 00:00, , 2F
可考慮視情況用auto_ptr或shared_ptr
12/09 00:00, 2F

12/09 00:20, , 3F
當然沒有用,你還需要 "overload" copy constructor。
12/09 00:20, 3F

12/09 23:20, , 4F
謝謝 加上copy constructor後果然OK了
12/09 23:20, 4F
文章代碼(AID): #1B7bbf_H (C_and_CPP)
文章代碼(AID): #1B7bbf_H (C_and_CPP)