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

C/C++ Q/A
[6927] Re:Re:c++ vector 생성자 및 소멸자 사용
[] 2351 읽음    2015-02-04 00:07
지난번에 올렸으나 아직 해결을 못해 구체적인 사용 지점을 추가하여
다시 한번 올립니다. 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 생성자 및 소멸자 사용 이준원 2322 2015/01/28
6926     Re:c++ vector 생성자 및 소멸자 사용 StarWagon 2449 2015/01/29
6927         Re:Re:c++ vector 생성자 및 소멸자 사용 2351 2015/02/04
6929             Re:Re:Re:c++ vector 생성자 및 소멸자 사용 남병철.레조 2482 2015/03/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.