問題タブ [stack-unwinding]
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++ - 例外でデストラクタが呼び出されないのはなぜですか?
A::~A()
私はこのプログラムで呼び出されることを期待していましたが、そうではありません:
ただし、最後の行を次のように変更すると
A::~A()
が呼び出されます。
Visual Studio 2005 から「Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86」でコンパイルしています。 コマンドラインはcl /EHa my.cpp
.
コンパイラはいつものように正しいですか? この問題について標準は何と言っていますか?
c - HP-UX および Linux でのスタックの巻き戻し
特定の時点で C アプリケーションのスタック情報を取得する必要があります。ドキュメントを読み、ネットを検索しましたが、どうすればよいかわかりません。簡単なプロセスの説明を教えてください。または、さらに良いのは、スタックの巻き戻しの例です。HP-UX (Itanium) と Linux で必要です。
c++ - C++ 関数を終了するとプログラムがクラッシュする....それは何だと思いますか?
C++ コードがあり、MSC9 を使用してコンパイルします。ランダムにクラッシュし続けます。たとえば、Perl から `` を使用して呼び出すとクラッシュしますが、コマンド ラインまたは Ultimate++ から呼び出すとクラッシュしません。
私はそれをperlから呼び出すことを意味します。f.exe arg1 arg2 arg3
スタック トレースはあまり表示されません。プログラムを1行ずつトレースすると、プログラムが最後に戻ったときに失敗することが証明されました...
だからその通りです
スタックが破損していると思われ、スタックが巻き戻された後、クラッシュします..
何が原因ですか?このプログラムは、pcre、stl、および反復子を使用します。イテレータはスタックを壊すことができますか? そのようなエラーをどのようにキャッチしますか?
コンパイラのバグでしょうか?
注: デバッグ バージョンはクラッシュしません。リリース バージョンのみがクラッシュします...
バグはこの pvector クラスに関連しているようです。
私はこれに似た構造体を持っています:
次の行が原因で失敗したようです。
問題は以下のクラスにあると思います... std::copy は pvector operator=(const pvector &pv) で正しいですよね?
pvector は perl 互換のベクトルです... そのインデックスは、ベクトルの割り当てられたサイズよりも大きくなる可能性があります。
Update1: 割り当てに漏れがあるという提案を受け取りました。割り当てを変更しました...それが今の様子です:
注: 戻り値の型に & を追加しても、クラッシュは残りました。ただし、リークを削除した後、delete [] m_rgArray; を追加します。、プログラムがクラッシュしなくなりました。理解できません。私の知る限り、リークはクラッシュを引き起こしません。これで問題は解決したようです(?)。疑問符は私の驚きを示しています。Update2: いいえ、問題が再発しました。ちょっとだけ消えました。Update3: 見つかったと思います。gflags.exe および windbg.exe と呼ばれる Microsoft デバッグ ツールのユーティリティを使用して、正確な場所を見つけました。gflags.exe /p /enable myprog.exe /full を使用して、ヒープ バグの例外を有効にしました。ここで、handle は初期化されていないランダムな値でした。
古いバージョン:
c - ポインタの質問
さて、私は関数の2つの層を通過しますfun1はfunc2を呼び出しますfunc3を呼び出します。基本的にint*ptrを使用してポインタを最後まで渡します。呼び出しスタックの最下位の「レベル」には、int配列にメモリを動的に割り当てる別の関数もあります。トップレベル(func1レベル)では、渡されたポインターに対して常にnullが返されます。func3までたどり着き、割り当てられたメモリが値でいっぱいになっていますが、コールスタックがfunc3-> func2をほどくと、ポインタが突然消えます(0x0000_0000)?func3レベルではわかりませんが、基本的にptr =locate_ptr_arrayと言いますが、その戻り値からNULLになります。私は記憶を解放しませんでしたが、世界で何が起こっているのでしょうか?私の質問は紛らわしいことを知っています。私はこれがデバッガーで起こるのを見てきましたが
c++ - 例外処理
スタックの巻き戻しが原因で、例外処理が少し高価であると人々が言うのを聞きました。
何も得られません。例外をスローするかどうか、および「リターン」を使用するかどうかにかかわらず、スタックの巻き戻しが発生します。では、違いはどこにあるのでしょうか。
たとえば、処理できないメモリの問題が発生した場合、唯一のオプションは、問題を処理または通知する必要がある領域に到達するまで機能を停止することです。では、例外をスローするための他のオプションは何ですか?
例外をスローする代わりに「リターン」を使用できますが、それは同じです。スタックの巻き戻しが 6 スタックも戻る可能性があることは知っていますが、戻り値と「戻り値」を組み合わせてチェックします。
説明を歓迎します。
c# - .Net - 「巻き戻し」とは?
この質問に答えているときに、例外の処理中に「カーソル」を移動しようとしたときに、次のダイアログが表示されることに気付きました。
次のステートメントをこの場所に設定できません。コールスタックをアンワインドしようとして失敗しました。
次のシナリオでは、巻き戻しはできません。
- デバッグは、ジャスト イン タイム デバッグを介して開始されました。
- 巻き戻しが進行中です
- System.StackOverflowException または System.Threading.ThreadAbortException 例外がスローされました。
アンワインドとは正確には何ですか?
assembly - Gnu Assembler (GAS) の CFI ディレクティブは何に使用されますか?
.cfi_startproc
すべての行の後に.CFI ディレクティブがあるようで、これらにはさまざまな種類があり.cfi_endproc
ます 。
これらの目的がわかりませんでした。
java - スタック巻き戻しの問題に関するJavaおよびC++
私の知る限り、キャッチされない例外の場合、C ++はローカル変数をすぐに破棄し、Javaは参照を解放し、残りをガベージコレクターに任せます。
これは正しいですか?この問題に関するJavaとC++の違いは正確には何ですか?言い換えると、スタックの巻き戻しの問題に関して、これら2つの言語のどちらが優れていると考えられますか?:)
c++ - C++で通常呼び出されるブロックが終了したときにローカル変数を破棄する方法は?
C++ は、ブロックが正常に終了する (制御が失敗する) か、例外がスローされるかに関係なく、ブロック内のすべてのローカル変数のデストラクタを逆の順序で自動的に呼び出します。
スタックの巻き戻しという用語は後者にのみ適用されるようです。ローカル変数の破棄に関して、前者のプロセス (ブロックの通常の終了) はどのように呼び出されますか?
c++ - デバッグを停止すると、スタックは巻き戻されますか?
私のデストラクタが呼び出されているかどうかに興味があります。
(特に Visual Studio の場合、赤い停止ボタンを押したとき)