コードをデバッグした後、次のエラーが発生します。
プログラム受信信号 SIGSEGV、セグメンテーション違反。/lib/i386-linux-gnu/libc.so.6 からの fgets () の 0xb7d79a67
これが何を意味するのか、誰か説明してもらえますか? CMake と OpenGL を使用して構築されたプロジェクトです。
コードをデバッグした後、次のエラーが発生します。
プログラム受信信号 SIGSEGV、セグメンテーション違反。/lib/i386-linux-gnu/libc.so.6 からの fgets () の 0xb7d79a67
これが何を意味するのか、誰か説明してもらえますか? CMake と OpenGL を使用して構築されたプロジェクトです。
プログラムが特権を持たないメモリにアクセスしようとすると、 はLinux Kernel
という信号を送信してプログラムを中断しSEGSEGV
ます。で、fgets
あまりにも多くのテキストを入力して、ポインターに割り当てたメモリを超えている可能性があります。シグナルはLinux Kernel
、 がプログラム (正しい意味でのプロセス) と通信する 1 つの方法です。一種の例外です。
以来、あなたはファイルを扱っています。ファイルが実際に存在するかどうかを確認する価値があります。ファイルを読み取る権限がないため、エラーが発生する可能性があります。
/lib/i386-linux-gnu/libc.so.6
は、関数が存在するLinux
システム上の共有ライブラリであり、プログラムに権限がない(おそらく)メインメモリアドレスであり、ファイルの長さを超える可能性があります。fgets
0xb7d79a67
これsegmentation-fault(SEGSEGV)
は、保護されたメモリ領域、または他のプログラムによって使用されているメモリ領域にアクセスするときに発生する可能性があるため、プログラムにはアクセスする権利がありません。
理解を深めるために、次の記事をお読みください 。、セグメンテーション違反のデバッグ