C++ 共享库中全局变量初始化时的分段错误
我有一个包含全局变量的共享库 int ***carg; int***carg; 此变量在函数处初始化 __attribute__((constructor)) void init(void) { carg = generator->get_carg(); } __属性(构造函数)void init(void){ carg=生成器->获取carg(); } 在哪里 int***get_carg(); 只返回预初始化的carg数组 如果此库正在加载,则存在分段错误 程序接收信号SIGSEGV,分段故障。 0x00007fffebe05fea位于/path/to/project/main.cpp:814的init()中 在这个框架中 (gdb) print carg $1 = (int ***) 0x0 (gdb) call generator->get_carg() $2 = (int ***) 0xf12410 (gdb)打印卡 $1=(整数***)0x0 (gdb)呼叫生成器->获取车() $2=(整数***)0xf12410 为什么这个赋值(一个指针被赋值给另一个指针)是分段错误的原因?如何初始化这个变量C++ 共享库中全局变量初始化时的分段错误,c++,segmentation-fault,global-variables,shared-libraries,C++,Segmentation Fault,Global Variables,Shared Libraries,我有一个包含全局变量的共享库 int ***carg; int***carg; 此变量在函数处初始化 __attribute__((constructor)) void init(void) { carg = generator->get_carg(); } __属性(构造函数)void init(void){ carg=生成器->获取carg(); } 在哪里 int***get_carg(); 只返回预初始化的carg数组 如果此库正在加载,则存在分段错误 程序接收信
UPD:我仍然不知道答案,但当carg变量被重命名时,并没有错误。我以为还有一个变量使用这个名称,但事实并非如此。可能生成器变量尚未初始化,并且没有指向有效的对象
调用get_cargs()会导致分段错误。可能生成器变量尚未初始化,并且未指向有效对象 调用get_cargs()会导致分段错误。不,get_cargs()没有问题,因为在此帧中,
(gdb)打印生成器->get_carg()[0][0][0]
正在工作。令我惊讶的是,我可以调用生成器->获取cargs()(gdb)$5
(gdb)设置carg=$
,并且没有任何错误,不,获取cargs(),这没问题,因为在这个框架中,(gdb)打印生成器->获取carg()[0][0]
正在工作。令我惊讶的是,我可以(gdb)调用生成器->获取cargs()
(gdb)$5
(gdb)设置carg=$
,而且没有错误
(gdb) print carg
$1 = (int ***) 0x0
(gdb) call generator->get_carg()
$2 = (int ***) 0xf12410