問題タブ [segmentation-fault]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 文字列を変更するこのコードが機能しないのはなぜですか?
cスタイルの文字列では、文字ポインタが指すメモリアドレスにcharをどのように割り当てますか?たとえば、次の例では、numを「123456」に変更したいので、pを「0」のある数字に設定して「4」で上書きしようとしました。ありがとう。
c - セグメンテーション違反 - 文字ポインタ
以下のコードの行:
セグメンテーション違反を与えます。ここで同様の質問をしましたが、num のコピーが 2 つあるためかどうかはわかりません。seg-faulting の理由を説明してください。ありがとうございました。
c++ - Xerces-Cの問題; オブジェクトデストラクタの呼び出しでのsegfault
私はXerces-CXMLライブラリをいじっています。
私が遊んでいるこの簡単な例があります。
メモリリークやセグフォールトなしで実行することはできないようです。それはどちらかです。
「クリーンアップ」でパーサーオブジェクトを削除すると、常にセグメンテーション違反が発生します。
ライブラリの2.8バージョンと2.7バージョンの両方を使用してみました。
注:コードからすべての例外チェックアウトを取りましたが、コードを使用しても使用しなくても同じ結果が得られます。読みやすく簡単にするために、以下のコードから削除しました。
Xercesに精通した人が何か提案をしたいと思っていますか?
バックトレースからはあまりわかりません。スーパークラスのデストラクタに飛び込んで、そこでセグフォールトしているだけです。
バックトレース:
コード:
c++ - string::string コンストラクターの奇妙な「バス エラー」
奇妙なエラーがポップアップし始めたとき、マルチマップオブジェクトの塗りつぶしを担当するコードの一部をテストしていました。
FreeBSD 5.4 では root 以外のユーザーでは正常に動作しますが、root で実行すると「バス エラー」でクラッシュします。
xcode - Xcode の「インデックスが壊れています。再構築されます」というメッセージに続いて、ルートで実行すると「セグメンテーション違反」が発生します
次のメッセージの原因を、おそらくそれを修正する方法についての提案とともに、誰か説明してもらえますか?
sudo <path to xcode
rootとして実行する必要があるデーモンをデバッグする必要があるため、root で XCodeを実行しています。
これを数回成功させましたが、Xcode でプロジェクトを開こうとすると、XCode から次のメッセージが表示されます。
他のプロジェクトは正常に開き、このプロジェクトは Xcode の非ルート インスタンスで正常に開きます。
コンピューターを再起動し、プロジェクト内からルートの pbxuser ファイルなどをすべて削除しようとしました。
また、自分のユーザーで実行されている Xcode でインデックスを再構築しようとすると、次のアサーション エラーが発生します。続行を押すと、Xcode がクラッシュします。
c - C プログラミング: seg faults、printf、および関連する癖
多くの若いプログラマーと同じように、コードのさまざまなポイントに「here1」、「here2」などの多数の print-to-console ステートメントを挿入して、プログラムがいつうまくいかないかを把握することの有用性を学びました。このブルート フォース デバッグ手法は、CS の研究を通じて何度も私を救ってくれました。しかし、C でプログラミングを始めたとき、興味深い問題に出くわしました。走ってみたら
もちろん、testCharのメモリをmallocしていないため、セグメンテーション違反が発生します。ただし、それがコードの流れであるため、セグフォルトが発生する前に「hello world」が出力されると論理的に考えるでしょうが、私の経験では、セグフォルトが最初に発生し、「hello world」が常に発生する場合があります。 " がコンソールに出力されることはありません。(この正確な例をテストすることはできませんでしたが、Linuxボックスでgccを使用してこの種の状況に何度も遭遇しました。)これは、コンパイラがいくつかのものを再配置したり、printfを実行したりすることに関係していると推測しています非同期的にフラッシュされるため、即時ではないある種のバッファを使用します。正直なところ、なぜそうなるのかはわからないので、これは完全に私の推測です。私が使用した他の言語では、「testChar = ...
私の質問は、C をプログラミングしているときになぜこれが起こるのですか? hello world が最初に出力されないのはなぜですか? 次に、同じ基本的なことを達成するこれよりも優れた C プログラミングのデバッグ手法はありますか? のように、問題のあるコード行を見つけるための簡単で直感的な方法は?
編集:私は偶然に実際の例を挙げました。私が今持っているものは、セグメンテーション違反を引き起こすはずです。おもしろいことに、セグメンテーション違反が必要ないときは通常、セグメンテーション違反を取得しますが、実際にセグメンテーション違反が必要な場合は、正当なコードを記述します!
recursion - 0 を返した後の segfault;
バイナリ ツリーをテストするプログラムを作成しましたが、実行するとプログラムがクラッシュするようです (btree.exe が動作を停止し、Windows が解決策を確認しています ...)。
デバッガーで実行し、原因と思われる関数 destroy_tree() にブレークポイントを設定すると、期待どおりに実行され、メイン関数に戻りました。Main はプログラムから戻りましたが、カーソルは destroy_tree() に戻り、再帰的にループしました。
最小限のコード サンプルを以下に示しますので、すぐに実行できます。私のコンパイラは MinGW で、デバッガは gdb です (Code::Blocks を使用しています)。
余談ですが、これらの問題をデバッグするために、Code::Blocks 組み込みデバッガーから DDD に切り替える予定です。DDD は、ポインターのアドレスを表示するだけでなく、オブジェクトへのポインターを視覚的に表示できると聞きました。このような問題 (データ構造やアルゴリズムの問題) の解決に、切り替えが役立つと思いますか?
c++ - C++/GLFW - Mutex オブジェクトを使用する正しい方法は?
マルチスレッドを広く使用するシミュレーションに取り組んでいます。問題は、これまでデータを保護するためにミューテックス オブジェクトを使用したことがないということです。その結果、多くのセグメンテーション違反が発生しています..
読み取り/書き込み中にミューテックスでロック/ロック解除しようとしていますが、別のセグメンテーション違反が発生します:
もちろん、基本的な状況にロック/ロック解除を適用したテスト プロジェクトを作成し、それが機能しました。GLFW を使用して Mutex オブジェクトを処理する方法を示す基本的な例を次に示します。
私が取り組んでいるプロジェクトはより大きく、5 つのスレッドが実行されており、多くのベクトル、マップ、キューが同時にアクセスされます。コードのどこかで、次のようなことをしようとしました:
VehicleManager:CreateVehicles() メソッドをロック/ロック解除の間に配置する理由は、このメソッドに次の行があるためです。
だから私はベクトルを保護したかった: vehicle_. しかし、結果として、上記のセグメンテーション違反が発生しました。そしてでも:
私は同じセグメンテーション違反を起こしました。
あなたが私の問題の性質を理解できるように、私は自分自身を十分に明確にしたことを願っています. 皆さん全員が GLFW を使用したことがあるわけではないので、このライブラリでミューテックスがどのように機能するかを理解できるように、最初の基本的な例を示しました。
ありがとう !
linux - SEGV_MAPERR とは何ですか?
とは何SEGV_MAPERR
ですかSIGSEGV
。
c - C で破壊された静的変数をデバッグする (gdb が壊れている?)
私は多くのプログラミングを行いましたが、C はあまり使用していません。デバッグについてアドバイスが必要です。マルチスレッド プログラム (OS X 10.4 で pthreads を使用) を実行してから約 10 ~ 100 秒後に、静的変数 (ファイル スコープ) が破壊されています。私のコードは次のようになります。
addr
しばらくの間有効なメモリアドレスを指し、その後何らかの値 (0 の場合もあればゼロ以外の場合もある) で上書きされ、逆参照時にセグメンテーション違反が発生します。をいじってみると、期待どおりに がメモリ内に配置されgdb
ていることが確認されたので、最初に推測したのは、範囲外のインデックスを使用して に書き込んだということです。ただし、これは小さなファイルなので、問題がないことを簡単に確認できます。addr
some_values
some_values
明らかなデバッグ手法は、変数にウォッチポイントを設定することですaddr
。しかし、そうすると、 で不規則で不可解な動作が発生するようですgdb
。ウォッチポイントは、への最初の割り当てでトリガーされaddr
ます。その後、実行を続行すると、すぐに別のスレッドで無意味なセグメンテーション違反が発生します...おそらく、プログラムの別の部分で静的変数のアドレスにアクセスする際のセグメンテーション違反です! しかし、gdb
そのメモリ アドレスを対話的に読み書きできるようにします。
gdb
明らかに混乱しています。誰かが理由を知っていますか?または、ウォッチポイントを使用せずにこのバグをデバッグするための提案はありますか?