MinGW下使用STL出现诡异的运行错误

来源:互联网 发布:ps mac破解版 百度云 编辑:程序博客网 时间:2024/06/06 02:57

MinGW下使用STL出现诡异的运行错误


最近进行OpenGL下载入3DS文件的研究,开发环境是WindowsXP+ minGW4.4 +QtCreator2.61minGW4.4是专门用来开发Qt应用程序的编译器,相对最新的minGW编译器(4.7)要落后一些。我在编程的时候发现使用将STL中的vector作为我自定义类的成员时,会出现运行错误。详细的情况是在其中的一个成员函数中调用vector::size()函数,能够正确地返回,但是出了这个函数的时候,vector::size()调用就会出错,显示117040789(我不记准确的数,大概就是这个),这样使用new的时候就会返回错误。由于以前一直都没有触发这个编译器的Bug,所以一开始我折腾了很久,写了很多cerrassert,使用gdb也没有办法。

目前的解决方法只有重新进行自定义类的内存布局,将所有有关STL的内容写在一块,或者类的内存布局这样的:大粒度的类成员放在前面,小粒度的数据成员放在后面,这样才稍微缓解一些。我测试了一下,内存布局改变了之后就vector::size()就不会出错了。