Perl を埋め込んだ後、MICroQuill Smartheap が「mem_bad_pointer」エラーをスローするのはなぜですか?

StackOverflow https://stackoverflow.com/questions/494530

質問

を使用する C++ アプリケーションに Perl を埋め込んでいます。 スマートヒープ. 。Perl をコンパイルして独自の malloc を使用するか、システムの malloc を使用するかに関係なく、大量のエラー mem___bad_pointer ダイアログが表示されます。「OK」をクリックしてエラーを無視すると問題なく動作するように見えますが、明らかに問題を実際に解決する必要があります。

SmartHeap を Perl ビルドにコンパイルする必要があるでしょうか?それは実現可能なのでしょうか?

以下であり 唯一の文書 mem__bad_pointer に関するページは見つかりましたが、問題の解決には程遠いです。perl と Smartheap がどこでどのように競合するのか理解できません。ご指摘をいただければ幸いです。

  • ポインターは、別の DLL や EXE、またはコンパイラ ランタイム ライブラリなど、SmartHeap 以外のメモリ マネージャーによって割り当てられました。マップ ファイルを調べて、SmartHeap バージョンの malloc、_fmalloc/farmalloc、またはoperator new がリンクされていることを確認します。
  • ポインタが「ワイルド」(初期化されていない)、スタック(ローカル変数)に割り当てられているか、または無効です。
  • ポインタは以前に解放されています。SmartHeap が最初にポインターが割り当てられていたページを解放した場合、SmartHeap はそれが二重解放であることを検出できません。ただし、SmartHeap は無効なポインターを報告します。このタイプのバグを検出するには、dbgMemDeferFreeing を使用します。
  • ポインタは、割り当て時以降にインクリメントまたはデクリメントされました。
  • 16 ビット x86 の場合、ポインタは割り当て後にニア ポインタにキャストされ、この場合ポインタのセグメント部分が失われます。
  • ポインタが割り当てられたメモリ プールが解放されたか、SmartHeap がタスクから登録解除されました。
  • ポインタが割り当てられたタスクは終了しました (セクション B.4 を参照)。
役に立ちましたか?

解決

のコードを見てなければ、問題をデバッグすることは困難です。 おそらく、あなたはsmartheapと、通常のメモリマネージャの両方を使用してメモリを割り当てています。ときにこれはスマートヒープなしのDLLビルドでメモリallocat発生することができます。

あなたのコードに応じて、割り当ては大丈夫かもしれない、あなたはallcoatedメモリ領域外に書き込みをすることができる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top