2013-08-14 2 views
-4
typedef struct 
{ 
    int day; 
    int month; 
    int year; 
} Date; 

typedef struct 
{ 
    int a; 
    int s; 
} MetaData; 

struct A 
{ 
    char arrA[10]; 
    char arrB[10]; 
    Date date; 
    A(char * arrA, char *arrB, const Date& date) 
    { 
     strcpy(this->arrA, arrA); 
     strcpy(this->arrB, arrB); 
     this->date = date; 
    } 
    A(const A& a) 
    {  
     strcpy(this->arrA, a.arrA); 
     strcpy(this->arrB, a.arrB); 
     this->date = a.date;  
    } 
}; 
bool operator < (const A & lhs, const A & rhs) 
{ 
    if(strcmp(lhs.arrA, rhs.arrA) == 0) 
    { 
     if(strcmp(lhs.arrB, lhs.arrB) == 0) 
      return false; 
     else return strcmp(lhs.arrB, lhs.arrB); 
    } 
    else 
     return strcmp(lhs.arrA, rhs.arrB); 
} 
typedef map<A, MetaData> TickerMap; 
int main() 
{ 

TickerMap tickerMap; 
char x[10], y[10]; 
Date date; 
A a(x, y, date); 
MetaData m; 
    //tickerMap.insert(make_pair(a, m)); 
    cout<<"The element is sucessfully inserted"<<endl; 
    return 0; 
} 

구조체를 생성 할 때마다지도에 객체를 삽입 할 때 런타임 오류가 발생합니다. 누군가 제발 정확한 문제를 말해 줄 수 있어요. 그것은 매우 helful 될 것입니다. 정상적인 구조체 (C 스타일)가있을 때 삽입하는 동안 문제가 없습니다.구조체를 cpp 스타일로 변경하면 런타임 오류가 발생합니다.

오류 : 런타임 확인 오류 # 2 - 'date'변수 주위의 스택이 손상되었습니다. (Visual Studio)

+2

Q : 런타임 오류 란 무엇입니까 ??? – paulsm4

+0

질문을 편집하고 표시된 런타임 오류 정보를 추가 할 수 있습니다. –

+0

프로그램이 Visual Studio에서만 작동합니다. 나는 gcc에서 실행을 시도했다. 그것은 거기에 좋다 .. –

답변

4

xy은 임의의 가비지가 포함 된 초기화되지 않은 배열입니다. 특히, 그들은 일반적으로 NUL 종료되지 않습니다. A의 생성자 strcpy을 사용하면 버퍼 오버런이 발생합니다.

프로그램이 정의되지 않은 동작을 보입니다. 일부 컴파일러에서 작동하는 것으로 보이는 범위까지는 순전히 우연히 발생합니다.

관련 문제