源代码太长,就不贴出来了,简单描述一下:
定义了一个结构体,在类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类,是没有这样的问题的…………
求解…………