最初はコードを提供していないことをお詫びしますが、エラーは何らかの形でランダムに発生するため、抜粋を C+P するのは困難です。
C ソースを GCC でコンパイルすると、非常に奇妙なエラーが発生します。Erlang 用のリンクされたドライバーを開発していますが、エラーの原因がわかりません。エラーは次のようになります。
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xffffffffb012aae8
[Switching to process 7316 thread 0x1503]
ktqk_exec (query=0x13e0af00, table=0x13e00ea0) at ktqk.c:215
215 clock_t start = clock();
GDB でラップされた Erlang 仮想マシンを実行しているので、メモリ セクションにアクセスできます。私には、高いアドレス0xffffffffb012aae8
は非常に疑わしいように見えます。ただし、Clang を使用すると、すべてが期待どおりに機能し、エラーもセグメンテーション フォールトも発生しません。私は調査しようとしました:
(gdb) p clock
$1 = {<text variable, no debug info>} 0x7fff85c29fd0 <clock>
(gdb) p start
$2 = 2954013712
したがって、値は明らかに初期化されておらず、以前にクラッシュしました。同じファイルにブレークポイントを設定すると、単純にスキップされます。Clang ではすべてが機能するのに、GCC では機能しないのはなぜですか?
Clang はデフォルトで C99 と GCC C89 を使用する-std=c99
ため、GCC でコンパイルするためのフラグを含める必要がありました。これは潜在的なソースでしょうか?しかし、上記のコードをコメントアウトすると、次の関数呼び出しで失敗します。そのため、何らかの関数呼び出しに関連しているようです。ただし、この行より前のすべての関数呼び出しは問題ありません。
非常に奇妙なエラーです。誰にもアイデアはありますか?このややあいまいな説明で申し訳ありませんが、私は単にエラーを理解していません。
万歳、マーティン