問題タブ [stack-corruption]

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.

0 投票する
1 に答える
15170 参照

android - 「スタックの破損が検出されました:中止されました」によるクラッシュ

最近、アプリがクラッシュしているという苦情をユーザーから受け取りました。ユーザーのエラーログから次の情報を抽出し、問題が発生する理由を確認できました。

スタックの破損が検出されました。すばらしいので、なぜそれが起こっているのかをどうやって知ることができますか?

この特定のクラスでは、死ぬ前にさらに多くのログ出力を期待していたため、この問題が発生していると思います。このクラスは、ソケットを使用してプレイリストをダウンロードして解析します。どうすればスタックを破壊できますか?C / C ++でスタックオーバーフローを処理しましたが、Javaでどのように処理しますか?

ご協力いただきありがとうございます!

0 投票する
2 に答える
350 参照

c++ - MSVC++ は、変数の周りのスタックが破損していると言っていますが、プログラムは動作します

これが「コンパイルされるので、動作するはずです!」のように聞こえる場合は申し訳ありません。質問ですが、なぜ何かが起こっているのか (場合によっては起こっていないのか) を理解したいと思います。

プロジェクト設定で、に設定Basic Runtime ChecksしましたBoth。デバッガーは次のことを通知します。

実行時チェックの失敗 #2 - 変数「beg」の周りのスタックが壊れていました。

しかし、デフォルト (なし) に設定すると、プログラムは正常に実行されて完了し、例外はスローされず、エラーも発生しません。

私の質問は、これを安全に無視できますか (MSVC++ が何らかの形で間違っている可能性があるため)、またはこれは本当の問題ですか? スタックが台無しになったときに、プログラムがどのように正常に続行できるかわかりません。


編集:

このエラーの原因となる関数は、次のようになります。

funはインクリメントして動作しbeg、返されると、beg == end、MSVC++ が壊れると、最後の を指し}ます。


編集2:

問題を切り分けました。場合によっては、反復する項目funの所有者からいくつかの要素を削除します。listこれがエラーの原因です。

0 投票する
1 に答える
2773 参照

c++ - 「this」ポインタがスタック トレースで破損する

私はこのスレッドを見てきました。私の場合は少し異なり、"this"ポインターがどのように破損しているのかを理解するのに苦労しています。

QTreeView私は自分のモデルでQt 4.6.2 フレームワークを使用しています。私が取得したバックトレース (長さ 86 フレーム、再帰が多いため、すべてを貼り付けていないのはこのためです。このペーストビンにはコードのみが含まれています。

最終的に QBasicAtomicInt::deref の一部のアセンブラで segfault が発生しますが、次の 3 つのフレームで証明されているように、さらにダウンしたことは明らかです。

フレーム 17 では、thisです0x942bb0。フレーム 16 ではthis、同じメソッドの祖先の実装を呼び出しているフレーム 17 と同じである必要があります。ただしthis、0x4 になります。

興味深いことに、フレーム 15 では (フレーム 16 で同じ関数の祖先の実装が呼び出されています)、「this」ポインターが に復元され0x942bba0ます。

完全なバックトレースのペーストビンを見ると、「値が最適化されていない」ことがわかる場合があります。最適化をオンにしてアプリケーションをコンパイルしました。私は今gccを設定して-g3 -O0いるので、次回それが起こったときはもっと何かがあるかもしれません. しかし、もちろん、今はクラッシュさせることはできません。これを発生させるのはかなり難しいバグです (ただし、修正することは非常に重要です)。

最適化を考えると、それはthis pointer=0x4異常ですか、それとも間違いですか? 奇妙なのは、これらの viewportEvent フレームのいずれにも実際のコードがないことです。これらのフレームは単にイベントのタイプを切り替え、switch ステートメントを通過し、先祖の実装を返します。

Valgrind ではまだクラッシュしていませんが、Valgrind で問題が発生しているようには見えません。

誰もこの動作を見たことがありますか? 何が原因でしょうか?

0 投票する
3 に答える
11741 参照

c++ - スタックの破損をデバッグする

現在、スタックが破損している大規模なプロジェクトをデバッグしています。アプリケーションが失敗します。

Visual Studio 2010 でこのようなスタック破損コードを見つける (デバッグする) 方法を教えてください。

スタックの問題を引き起こすコードの例を次に示します。このタイプの破損の明らかでないケースをどのように見つけることができますか?

アップデート

これは単なる例であることに注意してください。現在のプロジェクトでそのような悪いコードを見つける必要があります。

0 投票する
4 に答える
566 参照

c++ - 初期化順序によってスタックが破損する原因は何ですか?

質問は下に太字で示されています:

これは正常に機能します。

ただし、これによりアサートが失敗します。

この問題はシュリンクラップではないことがわかったので、質問をこれに限定します。どのような条件がこのような問題を引き起こす可能性がありますか?具体的には、スタックフレームの出現順序に応じて、変数の初期化が破損します。私のコードにはmallocやfreeはなく、strcpy、memcpyなどの安全でない関数もありません...これは最新のc++です。使用したコンパイラ:gccおよびclang。

簡潔にするために、ここにタイプがあります

ps、コンパイラに問題があると言っているわけではありません。おそらく私のコードです。しかし、私はずっと前に書いたコードをテンプレート化しているので、問題は私を完全に困惑させ、問題を見つけるためにどこを探すべきかわかりません。

編集

nimの提案に従い、次のループを通過しました

  1. コードをここに示したものにシュリンクラップし、コンパイルしてテストします。問題ありません。
  2. #if 0 #endifメインプログラムをシュリンクラップします。
  3. シュリンクラップ形式でコンパイルされるまでヘッダーを削除します。
  4. シュリンクラップ形式でコンパイルされるまでライブラリリンクを削除します。

解決策:プロトコルバッファへのリンクを削除すると、問題が解消されます

0 投票する
3 に答える
1343 参照

c++ - 大きなベクトルをスタックに格納するのは悪い考えですか?

私は一連の画像処理プログラムに取り組んできました..空想的なものは何もなく、主に迅速で汚い実験を行っています。画像データは、スタック上で宣言されたベクトルに格納されます (データを渡す必要がない場合は、ポインターを使用する必要がないようにしています)。数え切れないほどのデバッグとステップ実行にもかかわらず、関数の一部が非常に奇妙な動作をしていることに気付きました。デバッガーが特定の変数を評価できないなどのエラーを表示することがあります。物事は一般的に意味をなさないだけであり、過去の経験から、これが発生すると、何らかのオーバーフローまたはメモリ破損が発生していることを意味することがわかりました。最初に頭に浮かんだのは、おそらく大量の画像データをベクトルに格納したためだろうということでした。

ただし、ベクトルは実際のデータをヒープに格納するという印象を受けていたので、これらの大きなベクトルをいくつかスタックに置いても害はないと考えました。この考え方は間違っていますか?ベクトルを割り当てて、スタックではなくヒープに格納する必要がありますか?

ありがとう、

0 投票する
1 に答える
1580 参照

c++ - ループでReadConsoleを呼び出すと、スタックが破損するのはなぜですか?

次のコードで行入力を無効にしました:

次に、ループ内でReadConsoleを呼び出しています...ループ内:

プログラムを実行してすぐに0を押すと、きれいに存在します。
しかし、私がたくさんのキーを押してから0を押すと、プログラムが存在するときに次のようにクラッシュします。

実行時チェックの失敗#2-変数'cBuf'の周りのスタックが破損しました。

これによりスタックが破損するのはなぜですか?コードは単純なので、何が悪いのかわかりません。

問題を再現できる小さなプログラム:

キーボードを実行した後、キーボードをマッシュする必要があります。次に0を押すと、スタックが破損してクラッシュします。

また、毎回問題を再現することはできません。数回の試行が必要です。
新しい空のコンソールプロジェクトを作成し、そのコードを含むファイルを追加した後、VisualStudio2010で実行していました。

0 投票する
2 に答える
806 参照

c - K&R:C-スタックスマッシングが検出されました

私のコードは次のようなものです:

getlineこのような:

を使用gcc -Wall -O2 -g a.c -o a.outして実行するa.out -x -n 111<find_testと、find_testテストデータは次のようになります。

エラーメッセージが表示されました:

しかし、私が使用gcc -Wall -O2 -g -fno-stack-protector a.c -o a.outして実行すれば、a.out -x -n 111<find_testすべてが大丈夫です。理由がわかりませんでした。誰か助けてもらえますか?

0 投票する
1 に答える
2946 参照

c++ - スタックアラウンド変数が破損しています

このトピックには多くの質問があることは知っていますが、それらはすべてコードに固有のようです。

私はこの機能を持っています -

return ステートメントで、「Run-Time Check Failure #2 - 変数 'result' の周りのスタックが破損しています」というエラーが表示されます。

その機能に問題はありません。Matrix3x3 の配列はただ -

Point2 の配列は

Matrix3x3 クラスと Point2 クラスの両方にこのコードがあります -

このコードは私に与えられたもので、点、行列、およびベクトルを使って算術演算を行うための事前の宿題がいくつかありました。私のコードはすべてのテストに合格したので、私の Point2 ITCS4120::operator* (const Matrix3x3& m, const Point2& p) コードが正しいと仮定しました。しかし、[] 演算子を別の方法で使用する必要があるのではないでしょうか?

0 投票する
1 に答える
654 参照

c++ - Lua: pcall と Lua コールスタックの過負荷を避ける

を使用して Lua スクリプトへの非常に速いペースの呼び出しを実行するプログラムがありますlua_pcall。プログラムが lua スクリプトを呼び出す速度が速すぎると、非常にランダムな場所で問題が発生し、アクセス違反が発生するようです。

ミューテックスを試してみましたが、try/catch で SEH 例外を有効にしても無駄でした。エラー関数が配置されており、適切なリターン コードをすべてチェックしています。問題は、安全に処理された Lua エラーではなく、pcall の奥深くにある実際のアクセス違反です。

多くの場合、ブレークは で発生しますがluaV_execute、他のランダムな場所で発生することもあります。スタックにプッシュされたすべてのパラメーターが有効であることを確認しました。

戻る前に Lua に強制的に呼び出しを完了させる方法、または呼び出しスタックが破損しないようにする方法はありますか?