C GNU/Linux コードを FreeBSD に移植しようとしています。最初はコンパイルして異常動作しないと思っていたのですが、他のOSがネイティブに持っていない機能を使っていないので特に気になりませんでした。正常にコンパイルされますが ( を使用してエラーや警告は発生しません-Wall
)、アプリケーションは、GNU/Linux インストールで意図したとおりに正常に動作する行でセグ フォールトを継続します。
私がやっていることは、構造体へのポインターを作成し、そのポインターを void ポインターとして関数に渡し、関数内で再作成することです。
元:
typedef struct
{
int i;
}some_struct;
int main()
{
some_struct *test = malloc(sizeof(some_struct));
test->i = -1;
function(test);
return 0;
}
void *function(void *prarm)
{
some_struct test = *((some_struct *)param); //segfaults on this line.
free(param);
return NULL;
}
私のGNU/Linuxインストールでは、これにより、関数内でローカルに渡されたポインターデータを使用して構造体を再作成し、malloc
edメモリーを解放できるようになりますmain()
が、FreeBSDではセグフォルトが発生し、理由がわかりません。
途中で打ち込んでタイプfunction
するとgdb
p *(some_struct *)param
ポインターから作成されたコマンド構造体と、関数内のすべての変数を正常に出力します。
私の FreeBSD テスト マシンで、なぜこれが GNU/Linux と seg faulting で動作するのか、私は途方に暮れています。
私が抱えているこの問題に対する助けに感謝します。