-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; 
}

每当我用一些构造函数创建一个结构时。当我在地图中插入对象时,它会给我运行时错误。有人可以告诉我确切的问题。这将非常有帮助。当我有正常的结构(C 风格)时,插入过程中没有问题。

错误:运行时检查失败 #2 - 变量“日期”周围的堆栈已损坏。(视觉工作室)

4

1 回答 1

4

x并且y是未初始化的数组,包含随机垃圾。特别是,它们通常不是 NUL 终止的。当它们A的构造函数strcpy来自它们时,会发生缓冲区溢出。

您的程序表现出未定义的行为。在某种程度上它似乎可以与某些编译器一起使用,这纯粹是偶然的。

于 2013-08-14T05:06:39.317 回答