我有一个包含全局变量的共享库
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 变量时,没有错误。我认为还有一个带有这个名字的变量,但事实并非如此。
答案 0 :(得分:1)
生成器变量可能尚未初始化,并且没有指向有效对象。
调用get_cargs()会导致分段错误。