首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

linux在动态库中施用STL时出现Segmentation fault

2012-12-18 
linux在动态库中使用STL时出现Segmentation fault.下面是A.cpp文件的基本代码,编译成动态库的形式g++ -fPI

linux在动态库中使用STL时出现Segmentation fault.
下面是A.cpp文件的基本代码,编译成动态库的形式
g++ -fPIC -shared -lpthread  -o libA.so


typedef std::list<std::string> StringList;
class A
{
public:
    A();
public:

    StringList m_listBuff;
    void Init();
};

A::A()
{
    m_listBuff.clear();
}
void A::Init()
{
    //用gdb调试在此处调用size时候崩溃
    printf("size = %d\n", m_listBuff.size());
}
A g_a;
////////////////////////////////////////////
//动态库导入
void InitSO(void) __attribute__((constructor));

void InitSO(void)
{
    g_a.Init();
}


编译成so后,将so编译时加入测试程序Test.cpp,测试程序什么都不做。
g++ -g Test.cpp -o Test -L. -lA

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char * argv [])
{
getchar();
return 0;
}



然后用gdb调试Test,在动态库初始化的时候,调用void A::Init()总会出现Segmentation fault.
难道在在动态库中不能调用string的size获取大小么?
[最优解释]
看看此时类的各个成员变量,段错误一般是非法指针导致的.
[其他解释]
程序分段。。。。内存没搞好!!!

A::A(){    m_listBuff.clear();}
[其他解释]
已经发现问题所在,谢谢各位答复。
[其他解释]
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。

热点排行