グローバル変数を含む共有ライブラリがあります
int ***carg;
この変数は関数で初期化されます
__attribute__((コンストラクター)) void init(void) { carg = generator->get_carg(); }
どこ
int*** get_carg();
事前に初期化された carg 配列を返すだけです。
このライブラリがロードされている場合、セグメンテーション違反があります
プログラム受信信号 SIGSEGV、セグメンテーション違反。init () の 0x00007fffebe05fea at /path/to/project/main.cpp:814
この枠で
(gdb) プリントカーグ $1 = (int ***) 0x0 (gdb) ジェネレーターを呼び出します->get_carg() $2 = (int ***) 0xf12410
この代入 (1 つのポインターが別のポインターに代入される) がセグメンテーション違反の原因になるのはなぜですか? そして、どうすればこの変数を初期化できますか?
UPD: まだ答えはわかりませんが、carg変数の名前が変更された場合、エラーは発生しません。この名前の変数がもう 1 つあると思ったのですが、そうではありません。