-1

コードをデバッグした後、次のエラーが発生します。

プログラム受信信号 SIGSEGV、セグメンテーション違反。/lib/i386-linux-gnu/libc.so.6 からの fgets () の 0xb7d79a67

これが何を意味するのか、誰か説明してもらえますか? CMake と OpenGL を使用して構築されたプロジェクトです。

4

1 に答える 1

1

プログラムが特権を持たないメモリにアクセスしようとすると、 はLinux Kernelという信号を送信してプログラムを中断しSEGSEGVます。で、fgetsあまりにも多くのテキストを入力して、ポインターに割り当てたメモリを超えている可能性があります。シグナルはLinux Kernel、 がプログラム (正しい意味でのプロセス) と通信する 1 つの方法です。一種の例外です。

以来、あなたはファイルを扱っています。ファイルが実際に存在するかどうかを確認する価値があります。ファイルを読み取る権限がないため、エラーが発生する可能性があります。

/lib/i386-linux-gnu/libc.so.6は、関数が存在するLinuxシステム上の共有ライブラリであり、プログラムに権限がない(おそらく)メインメモリアドレスであり、ファイルの長さを超える可能性があります。fgets0xb7d79a67

これsegmentation-fault(SEGSEGV)は、保護されたメモリ領域、または他のプログラムによって使用されているメモリ領域にアクセスするときに発生する可能性があるため、プログラムにはアクセスする権利がありません。

理解を深めるために、次の記事をお読みください 。、セグメンテーション違反のデバッグ

于 2013-06-04T09:45:28.233 に答える