1

ライブラリは std::string を使用しています。特定のアプリケーションがリンクされると、ライブラリで実行される文字列操作が完全にクラッシュします。

たとえば、文字列代入演算子 '=' (スタック トレースが添付されています)。

ここに画像の説明を入力

memcpy_s( ... ) の宛先とサイズはかなりごちゃ混ぜに見えます。

ローカルで再現することはできません。ご意見をお聞かせください。

編集: コードは次のようになります。

...
#define DEFAULT_VAL "value"
...
class MyClass {
public:
 MyClass(const std::string& s=DEFAULT_VAL)
 {
  _test() = s;
 }
protected:
 inline const std::string& test() const {return m_test;}
 inline std::string& _test() {return m_test;}
private:
 std::string m_test;
};

....
MyClass c;
4

2 に答える 2

4

std::string(または) を 0 で初期化しているstd::wstring可能性が高く、ほとんどの場合、nullpointer を介して…

#include <string>
using namespace std;

int main()
{
    string s1( 0 );
    string s2 = s1;
}

そうしないでください。

std::string「クラッシー」を作る方法は他にあまりないので、おそらくこれです。今すぐデバッグに行きましょう!幸運を!

于 2012-11-14T10:19:51.580 に答える
2

インターフェイスで公開する DLL の場合はstd::string、.EXE と .DLL の両方が同じコンパイラ バージョンと同じフレーバーの CRT でビルドされていることを確認してください (両方ともデバッグ、両方ともリリース、両方ともなどと同じ設定_HAS_ITERATOR_DEBUGGING)。

于 2012-11-14T10:25:13.443 に答える