MFC应用程序中的“仅限Vista”堆损坏

时间:2011-09-27 04:49:01

标签: visual-studio visual-studio-2008 memory-leaks mfc windows-vista

我们是一个MFC应用程序,它链接到win32 DLL。当应用程序调用此DLL函数时,参数" buffer"进入功能堆栈后,它变为“坏指针”#34;这会导致应用程序崩溃。

static MyClass* Instance(string& buffer);

我将参数类型更改为" char *",但它只将崩溃推送到函数中的next语句。如何检测这个堆损坏?

几点提示

  • 即使我从应用程序的最开始(CWinApp构造函数)调用此DLL函数,此崩溃也是可重现的。加载资源,清单等会导致内存损坏吗?
  • 崩溃发生在Vista和Win7中,但不是在XP中。
  • 这两个项目最近都从Visual Studio 2002迁移到VS2008。

调用函数的代码

CString data = "some string";
string str = data.GetBuffer();
data.ReleaseBuffer();
MyClass *obj = MyClass::Instance(str);

2 个答案:

答案 0 :(得分:1)

有两个错误:

  1. 一些自定义构建的C ++文件未使用MD开关编译。我们必须将-MD添加到自定义构建脚本中,以使CRT与其他对象保持一致。

  2. LIBCMT.LIB和MSVCRT.LIB之间存在LNK2005冲突,否则由于/ FORCE开关而被忽略。我们通过在Linker->输入

  3. 中删除LIBCMT.LIB来解决这些冲突

    感谢大家的帮助。

答案 1 :(得分:0)

我猜这是calling conventions的错误使用或CRT不匹配(我使用调用约定)。

尝试使用相同的函数签名(无效)构建存根DLL,并使其与您的MFC应用程序一起使用。

这是example ...

HTH