問題タブ [undefined-behavior]
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++ - 次のコードはUBを呼び出しますか?
次のコードはUBを呼び出しますか?
c++ - new []、ポインターをキャストし、C ++の組み込み型を使用して安全にdelete[]することはできますか?
私のコードには、事実上次のものがあります。
問題のタイプはすべて組み込みであるため、簡単なデストラクタがあります。VC ++では、上記のコードは問題なく機能します。new[]
メモリを割り当てdelete[]
てから解放するだけです。
C ++で受け入れられますか?それは未定義の振る舞いですか?
c++ - nullterminate()ハンドラーは許可されていますか?
VC ++ 7では、次のようにすると次のようになります。
プログラムは、abort()
直接呼び出された場合とまったく同じように動作します。これは、デフォルトのterminate()
ハンドラーが行うこととまったく同じです。
ステートメントを省略するset_terminate( 0 );
と、終了ハンドラーが呼び出されます。したがって、呼び出しはハンドラーをデフォルトset_terminate( 0 )
にリセットする効果があるようです。terminate()
この動作はVC++7にのみ固有ですか?set_terminate( 0 )
他の実装を呼び出すと、プログラムは未定義の動作になりませんか?
c++ - 未定義の動作をすべての初心者に説明するにはどうすればよいですか?
C++標準が未定義の動作として属性を付ける状況がいくつかあります。たとえば、を割り当ててから、未定義の動作である(ではなく)new[]
を解放しようとすると、何かが発生する可能性があります。動作する可能性があり、ひどくクラッシュする可能性があり、サイレントに何かが破損し、時限問題が発生する可能性があります。delete
delete[]
これを説明するのはとても問題があります。彼らは「これが機能する」ことを「証明」し始め(実際に使用するC ++実装で機能するため)、「これで何が間違っている可能性があるか」と尋ねます。そのようなコードを書かないように動機付けるために、どのような簡潔な説明をすることができますか?
.net - ReadToDescendant および/または ReadElementContentAsObject を使用して XmlReader の問題を修正する
私は、通常は非常に優れたオープン ソース プロジェクトであるExcel Data Readerの謎のバグに取り組んでいます。特定の OpenXML .xlsx スプレッドシートからの値の読み取りをスキップしています。
問題はReadSheetRow メソッドで発生しています (以下のデモ コード)。ソース XML は Excel によって保存され、奇妙な動作が発生する空白が含まれていません。ただし、空白で再フォーマットされた XML (たとえば、Visual Studio で [編集]、[詳細設定]、[ドキュメントのフォーマット] に移動) は完全に正常に機能します。
空白を含むテスト データ:
空白のないテスト データ:
問題を示すコード例:
Aは の後に出力され_xmlReader.Read()
、Bは の後に出力されReadToDescendant
、Cは の後に出力されることに注意してくださいReadElementContentAsObject
。
空白を含む XML のテスト結果:
空白のない XML のテスト結果:
パターンの変更は、XmlReader の移動ReadElementContentAsObject
先または場所に問題があることを示しています。ReadToDescendant
ここで何が起こっているのか知っている人はいますか?
c++ - const オブジェクトの変更が未定義の動作である場合、コンストラクタとデストラクタは書き込みアクセスでどのように動作しますか?
C++ 標準では、最初に宣言されたオブジェクトを変更することconst
は未定義の動作であると述べています。では、コンストラクタとデストラクタはどのように動作するのでしょうか?
ここでは、コンストラクターとデストラクタは呼び出し元のコードとまったく同じことを行いますが、オブジェクトを変更することは許可されており、呼び出し元は許可されていません。未定義の動作に遭遇します。
実装の下で、標準に従ってどのように機能するはずですか?
c++ - 参照により非定数の一時的なものを投げる
非const参照によってスタック上に構築されたオブジェクトをtry-blockにスローし、それをキャッチして変更してから、別のcatchブロックを参照してスローすることに問題はありますか?
以下は私が参照しているものの短い例です。
これにより、e。何にジャンクが含まれる可能性がありますが、e。どこにそのまま残る可能性がありますか?例:
e.where is "123"
e.get()は、ヌルバイトに到達するまで、大量のガベージデータを返します。
c - Cで文字列を反転する
私はこれが何千回も尋ねられたことを知っていますが、私のコードでエラーを見つけることができません。誰かが私が間違っていることを親切に指摘できますか?
c - 割り当て評価の順序 (最初のコンパイラ バグを見つけましたか?)
このコードには興味深いバグがあります:
ほとんどのコンパイラでは、上記のコードにより、それぞれの配列内のすべての構造体の「値」フィールドが 1 に設定されます。ただし、ある特定のコンパイラ (xcc と呼びましょう) では、struct_array1 の構造体が正しく初期化されません。「値」フィールドはすべての構造体で 0 に設定されていますが、これにはちょっと驚きました。
次のコード スニペットは、すべてのコンパイラで期待どおりに機能します。
さて、私は完全にここから離れていますか、それとも問題のあるコンパイラ「xcc」が単にバグを表示しているだけなのでしょうか?
最初のコード スニペットで実装固有の動作を示すものは見つかりません。私が理解していることから、後置インクリメントは割り当てよりも優先され、割り当ては右から左に評価されるべきです。最初のコード スニペットは、少し読みにくいことを除けば、おかしなことは何もないはずです。