离奇的std::map、std::set崩溃

离奇的std::map、std::set崩溃

  • 现象描述
  • 定位之路
        • 1、和windows调用比较,没发现任何问题
        • 2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样
        • 3、最笨的办法之一用上,写一段这样的代码:
        • 4、面向互联网大法编程,百度、微软必应(不,不能狗狗),发现一个帖子,缩小有问题代码的范围,于是
        • 5、最笨的办法之二用上,缩小so代码范围
  • std::map、std::set崩溃的终极原因

现象描述

在一个动态库里使用了std::map和std::set,在windows上用VS2010调试一切正常。但在linux下,用的是Ubuntu64位虚拟机调试,编译链接都OK,但只要调到这个so库里的使用std::map和std::set的地方,这些变量在qt调试里都是**<无法访问>,而且只要调用这些变量的非size()接口,比如find()、insert()等接口都会导致程序崩溃**。
郁闷之间。。。。。。

定位之路

1、和windows调用比较,没发现任何问题
2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样
3、最笨的办法之一用上,写一段这样的代码:

typedef map STRMAP;
STRMAP sm;
string str = “sdfasf”;
STRMAP::iterator it = sm.find(str);
sm.insert(std::make_pair(“fasf”, &sm));
it = sm.find(str);
放到可执行程序里调用,没有任何问题;放到so里的接口里的开始,按说单步到string str = “sdfasf”;时,sm应该被初始化,变量里能看到sm的值,但实际上sm的值就是<无法访问>,再往下执行fin

你可能感兴趣的:(码代码,c++)