`

STL map 插入结构体的值不成功

阅读更多

源代码太长,就不贴出来了,简单描述一下:


定义了一个结构体,在类U中被作为map值类型,类M有一个类U类型的数组。

struct A{
 string name;
 double value;
};

class U{
public:
  map<int, A> param;
  ....................
  void setParam(int, A);
  ..................
};
void U:: setParam(int s, A pa){
  param.insert(pair<int,A>(s, pa));
}

class M{
public:
  U multi[20];
  ...................................
 void initM();
};

void M:: initM(){
 for(int i=0; i<20; i++){
    string someStr;
    A initPa = {someStr, 0.0};
    multi[i].setParam(i, initPa);
 }
}
 

 编译链接没有问题

编译器g++ 4.3.3 系统ubuntu

运行时报错:segmentation fault

gdb后给的信息是类似:

std::_Rb_tree map <int, std::pair <int const, A> std::_Select1st map <int, std::pair <int const, A> std::less <int>, std::allocator <std::pair <int const, A> > >::insert_unique(std::pair <int const, A> const&) 


最早是觉得是map的错,google的结果是很有可能其他操作破坏了结构体A initPa, 但是检查之后并没有发现有其他操作使用了这个变量,最后在声明map<int, A> param 的地方 加了关键字struct 改为 map<int, struct A> param。程序竟然神奇的运行了……


我印象里c++是不需要关键字struct来定义变量的,但是不知道为什么这里要加这个。而且,如果没有第二个类M,直接操作U类,是没有这样的问题的…………


求解…………




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics