2013-04-21 162 views
1

我有一個包含全局變量分段故障

 

    int ***carg; 

共享庫這個變量是在函數初始化

 

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

其中

 

    int*** get_carg(); 

剛返回預初始化的carg數組。

如果這個庫加載有

計劃接收信號SIGSEGV,分段故障分段故障。在/path/to/project/main.cpp:814

0x00007fffebe05fea中的init()在該幀中

 

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

爲什麼這個分配(一個指針被分配給其它指針)是原因分段故障?我怎樣才能初始化這個變量?

UPD:我還是不知道答案,但是當carg變量被改名了,沒有錯誤。我認爲這個名字還有一個變量,但事實並非如此。

回答

1

可能發電機變量尚未初始化,並且不指向有效的對象。

調用get_cargs()會導致分段錯誤。

+0

不,get_cargs()沒關係,因爲在這個框架中 '(gdb)print generator-> get_carg()[0] [0] [0]' 正在工作。 (gdb)call generator-> get_cargs()' '(gdb)$ 5' '(gdb)set carg = $'' 這對我來說是令人驚訝的,並且沒有錯誤 – erthalion 2013-04-21 11:14:43