共享库中全局变量初始化时的分段错误

时间:2013-04-21 10:42:42

标签: c++ segmentation-fault global-variables shared-libraries

我有一个包含全局变量的共享库


    int ***carg;

此变量在函数

初始化

    __attribute__((constructor)) void init(void) {
        carg = generator->get_carg();
    }

,其中


    int*** get_carg();

只返回预初始化的carg数组。

如果正在加载此库,则存在分段错误

  

编程接收信号SIGSEGV,分段故障。   在/path/to/project/main.cpp:814的init()中0x00007fffebe05fea

在此框架中


    (gdb) print carg
    $1 = (int ***) 0x0
    (gdb) call generator->get_carg()
    $2 = (int ***) 0xf12410

为什么这个赋值(一个指针被分配给其他指针)是分段错误的原因?我该如何初始化这个变量?

UPD:我仍然不知道答案,但是当重命名 carg 变量时,没有错误。我认为还有一个带有这个名字的变量,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

生成器变量可能尚未初始化,并且没有指向有效对象。

调用get_cargs()会导致分段错误。