###前提・実現したいこと
タイトルのように可変長の配列を複数のソースコードをまたいで利用したいと考えています。
下に記述したコードで例示すると、source_A.cで構造体foo、要素数barの配列を用意し、source_B.cでも利用すると言った流れです。
現状で自分が考えていた手法としては、下のソースコードに記述したようにsouce_A.c内でmalloc()を利用して配列に用いるメモリの動的確保を行いそこへのポインタをexternを利用してsource_B.cでも利用できるようにする。
といった実装を考えていたのですが、実際に実行してみたところSegmentation faultが発生してしまいました。gdbで確認したところexternにしたはずのポインタfoo_tableがsource_B.c内では消えてしまっているようでした。
自分が考えている手法の改善策でも、別の実装案でも問題ありませんので、何らかの解決策があれば教えていただきたいです。
###エラーメッセージ
停止時のエラーメッセージ Program received signal SIGSEGV, Segmentation fault. gdbで確認したfoo_tableのポインタの値 source_A.c内でブレークポイントを設定したfoo_tableのポインタの値 (gdb) p foo_table $2 = (struct foo *) 0x32c60 source_B.c内でブレークポイントを設定したfoo_tableのポインタの値 (gdb) p foo_table $5 = (struct foo *) 0x0
###該当のソースコード
実装しているソースコードは行数が多く、そのままでは載せることが出来ないため関係する部分のみ例という形で記述させていただきます。
C
1// source_A.c 2struct foo *foo_table; 3void function_A(){ 4 … 5 struct foo *foo_table = malloc(sizeof(foo) * bar); 6 … 7}
C
1// source_B.c 2void function_B(){ 3 … 4 printf(test:%s\n, foo_table[0].key); 5 … 6}
C
1// source.h 2… 3struct foo { 4 char * key; 5 char * value; 6}; 7 8extern struct foo *foo_table; 9…
回答2件
あなたの回答
tips
プレビュー