Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6929] Re:Re:Re:c++ vector 생성자 및 소멸자 사용
남병철.레조 [lezo] 2598 읽음    2015-03-13 00:41
올려주신 코드만 보자면,

: typedef struct Info
: {
:
:   std::vector<predicted> Point_ADD;

Point_ADD는 predicted 클래스 인스턴스를 넣어주어야하네요.

pTrack->Point_ADD.push_back(*pline);

코드에는 pline으로 되어 있어서 나는 에러인 것 같습니다.

혹은 구글에서 "Invalid address specified to RtlValidateHeap" 관련으로 검색해 보셔도 좋을 것 같습니다.



- 수정 -

predicted pline; 으로 선언되어 있었네요. ^^;





님이 쓰신 글 :
: 지난번에 올렸으나 아직 해결을 못해 구체적인 사용 지점을 추가하여
: 다시 한번 올립니다. pTrack에 데이터를 삽입을 해야하는데
: 다른 변수들(RSS, Deeps, GDH)은 정확하게 삽입이 되고 있습니다.
: 그러나 Point_ADD에도 데이터를 삽입이 필요하여
:
: 다음과 같은 코드를 pTrack->Point_ADD.push_back(pline); 추가하였습니다만
: 추가하면 에러가 발생하는듯 합니다. 호출스택을 보면 dbgheap.c부분에서
: 나고 있어 찾기가 쉽지 않아 도움을 고수님들께 부탁드립니다.
:
: 이렇게 올리면 보기 힘들것 같아 죄송하지만...
: 작은 도움이나 청하려고 이렇게 올립니다...
:
: 혹시 몰라서 dbgheap.c 캡처도 올립니다.
:
:

:
: ///////////////////   common_Type.h ////////////////////////
:
: class predicted
: {
:   public:
:     double m_f64x;
:     double m_f64y;
:     double m_f64z;
:     
: }
:
: typedef struct Info
: {
:
:   std::vector<predicted> 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
:
:
: /////////////////////////////  cMini.h ////////////////////////
:
:
:
: namespace UTANK
: {
:    class cHistory
:    {
:       public:
:          double m_f64X;
:          double m_f64Y; 
:          double m_f64Z;
:    
:    };
:
:
:    class cMini
:    {
:    
:     public:
:
:     int m_32Index;
:     double m_deeps;
:     double m_gdh;
:     std::vector<CHistory> m_Hists;
:    };
:
: }
:
:
:
: ///////////////////////////////// Airsituaiton.cpp ///////////////////////
:
:
: void:: CAirsituation::Addform(CDA* decode)
: {
:
:
:    Info* pTrack = new Info;
:
:
:     pTrack -> RSS = decode->m.Track->m_32Index;
:
:     pTrack->Deeps[0]     = decode->m.Track->m_deeps.GetValue().m_f64D;
:     pTrack->Deeps[1]     = f64V;
:     pTrack->GDH[0]       = decode->m.Track->m_gdh.GetValue().m_f64Az;
:
:
:     int s32size = decode->m.Track.m_Hits.size();
:
:     predicted pline;
:
:   if(s32Size == 0)
:    {
:         for(int i=0; i<s32Size; i++)
:          {
:
:             pline.m_f64X = 0;
:             pline.m_f64Y = 0;
:             pline.m_f64Z = 0;
:
:             pTrack->Point_ADD.push_back(pline);   <------ 에러 추정
:
:          }
:    }
:   else
:   {
:           for(int i=0; i<s32Size; i++)
:           {
:
:              pline.m_f64X = decode->m_Track.m_Hists.at(i).m_f64X;
:              pline.m_f64Y = decode->m_Track.m_Hists.at(i).m_f64Y;
:              pline.m_f64Z = decode->m_Track.m_Hists.at(i).m_f64Z;
:             pTrack->Point_ADD.push_back(pline);    <----- 에러 추정
:
:           }        
:       }
:
:
:  }
:
:
: StarWagon 님이 쓰신 글 :
: : 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
: : :

+ -

관련 글 리스트
6925 c++ vector 생성자 및 소멸자 사용 이준원 2413 2015/01/28
6926     Re:c++ vector 생성자 및 소멸자 사용 StarWagon 2545 2015/01/29
6927         Re:Re:c++ vector 생성자 및 소멸자 사용 2453 2015/02/04
6929             Re:Re:Re:c++ vector 생성자 및 소멸자 사용 남병철.레조 2598 2015/03/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.