問題タブ [msvcrt]
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++ - msvcrt:メモリ使用量は大きくなりますが、デバッガではありません
私はインテル®コンパイラー、32ビットでMSVC6モードでコンパイルされたC++コードを持っているので、msvcrt.dllまたはmsvcrtd.dllのいずれかを使用します。このプロセスでは、大量のメモリの割り当てと割り当て解除が行われます。WMIを使用してメモリ使用量を監視し、VirtualSizeとWorkingSetSizeを確認します。
デバッグランタイム(msvcrtd.dll)を使用:仮想定数1.7GB、
非デバッグランタイム(msvcrt.dll)を使用して動作定数1.2GB:仮想レイズ1.7〜2.1GB
、
非デバッグランタイムを使用して1.2〜1.4GBをレイズしますが、デバッガー(windbg):仮想定数1.7GB、動作定数
2.1 GBの仮想では、プロセスがクラッシュします(予想どおり)。しかし、仮想使用量が(デバッグ以外の)msvcrt.dllでのみ、デバッガーの下にない場合にのみ増加するのはなぜですか?すべての場合において、コンパイルフラグは同一であり、ランタイムライブラリのみが異なります。
c++ - 古いランタイムに対するビジュアル C++ 2010 リンク?
これが尋ねられた場合は申し訳ありません。
.NET 2.0 ランタイム用にビルドする C# プロジェクトを選択できるように、ネイティブ C++ プロジェクトを古い CRT (Visual Studio 2005 のものとしましょう) に対してビルドすることは可能ですか?
VS2005 でビルドされた外部 SDK を持っているのでこれが欲しいのですが、新しい IDE を使用したいです。
c++ - DBL_MINに対して0.0によるC++二重除算
ダブルの逆平方根を見つけるとき、0.0またはMIN_DBLで無効な非正の入力をクランプする方が良いですか? (以下の私の例でdouble b
は、浮動小数点の丸め誤差と、ゲーム内で物理法則がわずかに曖昧であるために、負になる可能性があります。)
0.0による除算とMIN_DBLはどちらも、ゲームで同じ結果を生成します。これは1/0.0
、と1/DBL_MIN
が事実上無限であるためです。私の直感では、MIN_DBLの方が適していると言われていますが、0.0を使用する場合はありますか?おそらくのようsqrt(0.0)
に、そしてそれらは特殊なケースであるため1/0.0
、乗算はより速く実行されます。1.#INF000000000000
MSVCでの二重除算:
visual-studio - LNK4098 の解決: defaultlib 'MSVCRT' が競合しています
この警告:
Visual Studio ではかなり一般的な警告です。その正確な理由と、それを処理する正しい方法 (もしあれば) を理解したいと思います。
これは、でコンパイルされたデバッグ ビルドで表示され/MDd
ます。プロジェクトは、ウィンドウVersion.dll
などにリンクされており、pdh.dll
それ自体が にリンクしていMSVCRT.dll
ます。明らかに、これらのデバッグ バージョンがなく、コンパイルできません。
そのため、リンカーのコマンドラインに追加/NODEFAULTLIB:MSVCRT
したところ、実際に警告が削除されました。しかし、これは実際に何をするのでしょうか? そして、なぜそれが必要なのですか?
c++ - スカラー削除の結果としてベクトル削除デストラクタが呼び出されるのはなぜですか?
大規模なシステムでクラッシュするコードがあります。ただし、コードは基本的に次の擬似コードに要約されます。これを最小限の骨にまで煮詰めようとしたので、詳細の多くを削除しました。私はこれが決定的なものを見逃すとは思わない。
と:
一致するスカラー new とスカラー delete が使用されていることに注意してください。
Visual Studio (2008 Pro) のデバッグ ビルドでは、Microsoft の <dbgheap.c> で次のアサーションが失敗します。
スタックの一番上には、次のアイテムがあります。
こうあるべきだと思う
つまり、プログラムは私が書いたかのように動作しています
のアドレスpUserData
は、myObj
(メンバーではなく) それ自体のアドレスです。そのアドレス周辺のメモリは次のようになります。
ここで、4 つVV
の s はおそらく仮想関数テーブルのアドレスであり、MM...MM
認識可能なメンバー データであり、他のバイトはデバッガーによって配置されたさまざまな特別なマーカーです (たとえば、FD FD
s はオブジェクトのストレージの周りの「ガード バイト」です)。
アサーションが失敗する少し前に、VV
s が変更されているのを確認しました。これは、基本クラスの仮想関数テーブルへの切り替えによるものではないかと考えています。
クラス階層の間違ったレベルが破壊されるという問題を認識しています。それはここでは問題ではありません。私のデストラクタはすべて仮想です。
Microsoft のページ "BUG: エクスポートされたクラスに対して間違った演算子の削除が呼び出されました" http://support.microsoft.com/kb/122675に注意 してください。データ。
私の場合、デストラクタを削除するという間違った「フレーバー」が適用されているようです。つまり、スカラーではなくベクトルです。
私は、まだ問題が発生する最小限のカットダウン コードを作成しようとしています。
ただし、この問題をさらに調査する方法に役立つヒントやヒントをいただければ幸いです。
おそらく、ここでの最大の手がかりmydll_d.dll!operator delete()
はスタックにあります。s が「失われた」myexe_d.exe!operator delete()
ことを示す であると期待する必要がありますか?DLLEXP
これは二重削除のインスタンスである可能性があると思います(しかし、そうは思いません)。
_CrtIsValidHeapPointer
何をチェックするかに関して私が読むことができる良い参考文献はありますか?
visual-c++ - /MT と /MD でコンパイルされたコードの混合
/MT でコンパイルされた大量のコードがあります (つまり、CRT に対して静的にリンクすることを期待しています)。これを、/MD でビルドされた静的なサードパーティ ライブラリと組み合わせる必要があります (つまり、CRT を動的にリンクすることを期待しています)。
理論的には、再コンパイルせずに2つを1つの実行可能ファイルにリンクすることは可能ですか?
/nodefaultlib:msvcrt とリンクすると、__imp__wgetenv
. これらの関数を自分のコードに実装したり、 に転送したりしたくなります。試すwgetenv
価値はありますか、それとも次の問題に直面しますか?
残念ながら、サードパーティのコードを別の DLL にパックするという簡単なオプションを取ることは禁じられています :-/
c - fread.PNGファイルの最初の5バイトのみ
ゲームのリソースを1つのファイルにパックするためのシンプルなリソースパッカーを作成しました。私がアンパッカーを書き始めるまで、すべてが順調に進んでいました。パックした.txtファイル(26バイト)がリソースファイルから正常に出力され、問題なくすべてのデータが保持されていることに気付きました。ただし、リソースファイルにパックした.PNGファイルを読み取ると、最初の5バイトはそのままで、残りは完全に無効になりました。
これをパッキングプロセスまでたどると、freadが.PNGファイルの最初の5バイトしか読み取っていないことに気付き、その理由を一生理解できません。ファイルの長さがわずか5バイトであることを示す「EOF」もトリガーされますが、実際には、100ピクセル×100ピクセルの小さなポリゴンの787バイトのPNGです。
このPNGファイルをバッファに読み込むための別のアプリケーションを作成してこの問題をテストしたところ、同じ結果が得られ、5バイトしか読み取られませんでした。
その小さな個別のアプリケーションのコードは次のとおりです。
誰かが私の愚かな間違いを指摘してもらえますか?
visual-studio-2010 - システムが64ビットの場合は、VC++ランタイム64ビットをインストールします
アプリケーションをインストールするためのVisualStudio2010セットアッププロジェクトを作成しています。私のアプリケーションは、システムのビット数が異なる複数の実行可能ファイルを使用して動作し、32ビットシステムと64ビットシステムのどちらで実行しているかを検出します。
64ビットシステムの場合、インストーラーによってVisual C ++2010x64ランタイムをインストールしてもらいたいのですが。これを前提条件として設定すると、32ビットシステムへのインストールが無効になります。これを前提条件として設定する方法はありますが、64ビットシステムでのみ、2つの異なるインストーラーに頼ることはありませんか?
python - Tkinterを使用したPy2exe
py2exeを使用して基本的なtkinterGUIプログラムを.exeに変換しようとしています。ただし、次の変換スクリプトを使用してエラーが発生しました。
C:\ Python26\py2exe_test_tk.pyは次のコードです
これは、新しく作成した.exeを実行しようとしたときに発生するエラーです。
変換スクリプトで問題が発生していると確信しています。何を省略しましたか?または、誰かがtkinter GUIプログラムの変換スクリプトがどのように見えるかの例を持っていますか?また、出力.exeファイルをデスクトップに転送することはできますか?
編集:
エラーレポートには、 {C:/ Users / My_name / lib/tcl8.5}からinit.tclが欠落していると記載されていました。そこで、そのディレクトリを作成し、init.tclのコピーをそこに置きました。.exeを実行しようとすると、MSVCR90.dllがコンピューターにないため、プログラムを実行するために必要であると表示されます。
また、これはWindows7のpython2.6.5です。
c - fopen FILE 構造からファイル HANDLE を取得するにはどうすればよいですか?
このfopen
関数は構造体へのポインタを返しますがFILE
、これは不透明な値と見なされるべきであり、その内容や意味は扱われません。
Windows では、C ランタイムは Windows API のラッパーであり、fopen
関数は関数に依存していCreateFile
ます。この関数は、他の Windows API で使用される をCreateFile
返します。HANDLE
ここで、 と を使用するライブラリの奥深くで Windows API を使用する必要がありfopen
ますFILE*
。だから:構造HANDLE
からを取得する方法はありますか?FILE
これはコンパイラ固有のものであるため、MSVC ランタイム ライブラリを意味します。
これは醜く、移植性のないハックであり、Microsoft が ... の内部フォーマットを変更すると壊れる可能性があることは理解していFILE
ますが、私はクローズド システム (つまり、Windows CE 組み込みシステム) で開発しており、ライブラリをリファクタリングしています。困難で時間がかかるでしょう。