5

コードは1行しかありません。これは次のとおりです。

pcrecpp::RE re("abc");

関数内OnBnClickedButtonGo()。この関数はリリース モードでは失敗しますが、デバッグ モードでは問題なく動作します。

(Windows XP で Visual Studio 8 を使用しています。)

エラーメッセージは次のとおりです。

A buffer overrun has occurred in testregex.exe which has corrupted the program's
internal state. Press Break to debug the program or Continue to terminate
the program.
For more details please see Help topic 'How to debug Buffer Overrun Issues'.

目に見えず、暗示されているデストラクタだと思います...しかし、私は本当に知りません。

PS: PCRE lib バージョン 7.8 に静的にリンクしています。PS2: あまり関連性はありませんが、PCRE ライブラリへのリンクに問題がある一部の人々を助けるかもしれません (それを整理するのに何時間もかかりました): 行を含めます#define PCRE_STATIC.

4

3 に答える 3

3

私の場合、同じエラーメッセージが表示されました。デバッグでは問題ありませんが、リリースではエラー メッセージが表示されます。のようなネイティブ C/C++ ライブラリがありnative.dllます。そのライブラリの .net へのラッパーである混合アンマネージ/マネージ C++ ライブラリを作成しました。このどこかに、次mixed.dllのようなアンマネージ関数シグネチャ宣言があります。

typedef void ( *FunctionOnStartSend)();

このため、メッセージが表示されますが、そこに「魔法の言葉」を追加すると、エラー メッセージは表示されません。

typedef void (__stdcall *FunctionOnStartSend)(); 
于 2010-01-27T13:01:40.937 に答える
0

ここに私の新しい歴史があります: 約 1 か月前に、VS2008 の奇妙なリンク障害が発生し、その日、_SECURE_SCL=0の設定が役立つ可能性があることを発見しました (リンク テキストを参照)。そしてそれは役に立ちました。その日、それは私を助け、私はこの設定をチームで構築するすべてのライブラリに伝播しました.MSは、異なる_SECURE_SCLで構築された2つのライブラリは互換性がないと言っているからです.

時が経ち、3 日前、VS2008 が最初の投稿で見たエラー メッセージを表示したときにバグが発生しました。また、Release ビルドでのみオーバーランするため、デバッガーからのヘルプはありません。ライブラリのコードをポンピングしてジャンプするのにほぼ2日を費やしましたが、オーバーランには行ごとに欠陥がありました。最後に、ビルド設定を1行ずつチェックし始め、この設定の違いを見つけました!

なぜ、ああ、マイクロソフトの連中は、現在実行中のライブラリと動的にロードされるライブラリが互換性がないことをテストするために、ダイナミック ローダー コードにいくつかの小さなチェックを埋め込むことができないのですか?! 人々の時間を節約するコードの一部。何とか!

于 2010-10-07T10:33:01.950 に答える
0

リリース モードでのみ発生している場合は、何かが「最適化」されている可能性があります。Match() のような 1 つのライナーだけでなく、一致を出力することも試してみてください。

于 2008-12-24T00:24:24.747 に答える