point 라는 클래스나 Info 라는 구조체의 변수들을 보니
기본 대입 연산자로도 원하는 깊은 복사가 될텐데요?
물론 vector도 포함해서...
따라서 대입 연산자를 정의 안해도
Info A,B;
-- A에 값을 채움 --
B=A;
B는 A와 동일한 값을 가집니다.
또 한, Info 라는 구조체에 소멸자를 정의 해주지 않아도
기본 소멸자가 호출될 때 vector의 소멸자도 호출 됩니다.
제가 보기엔 구조체의 함수 문제가 아니라
구조체의 사용에 문제가 있는것 같은데...
애러가 발생하는 부분의 코드를 봐야 정확히 알겠네요.
이준원 님이 쓰신 글 :
: 안녕하세요 급하게 질문이 있어 고수님들께 질문드립니다.
:
: 잘 돌아 가는 코드에 아래와 같이 Point_ADD라는 vector를 Info struct에 추가를 하였습니다.
:
: 그런데 HEAP[Console_dbg.exe]: Invalid address specified to RtlValidateHeap( 003B0000, 021D19C8 )
:
: 에러가 나고 있습니다. Info() 및 Info & operator 에 추가를 안해서 그런거 같습니다만.. ^^;;
:
: vector를 사용할때는 생성자 및 소멸자를 잘 작성이 되어야 된다고 들었습니다.
:
: 혹시 아시는 분 있으시면, 도와주시면 정말 감사하겠습니다...ㅠ.ㅠ
:
:
:
:
:
: class point
: {
: public:
: double m_f64x;
: double m_f64y;
: double m_f64z;
:
: }
:
: typedef struct Info
: {
:
: std::vector<point> Point_ADD;
:
: int RSS
: BOOL ACTS;
: double Deeps[2];
: double GDH[2];
:
: Info()
: {
: RSS=0;
: ACTS = FALSE;
: memset(Deeps, 0x00, sizeof(Deeps));
: ZeroMemory(GDH, 0x00, sizeof((GDH));
: }
:
: Info & operator=(const Info& rack)
: {
: RSS = rack.RSS;
: ACTS = rack.ACTS;
: memcpy(&Deeps[0],&rack.Deeps[0],sizeof(Deeps));
: memcpy(&GDH[0],&rack.GDH[0],sizeof(GDH));
:
: return *this
: }
:
:
: }Info
:
|