1

我的框架中有一个模板类,当在调试模式下检查时,它开始报告变量的无效/损坏/bad_ptr 值。然而,这些变量在打印到控制台时看起来是正确的。

我发现有四个因素对这种情况的发生至关重要:

  • 使用 /MDd 运行时库内置调试(/MTd 似乎不受影响)
  • 全部重建后运行
  • 包含 #define _HAS_ITERATOR_DEBUGGING 0 宏
  • 构造函数中的 ifstream 对象

在以下示例中,构造函数参数 str 在检查时应显示为损坏/无效/bad_ptr,但会正确打印到控制台。消除上述任何一项因素即可解决问题。

#define _HAS_ITERATOR_DEBUGGING 0

#include <iostream>
#include <string>
#include <fstream>

template <class T>
class Foo
{
public:
  Foo(std::string str)
  {
    std::cout << str << std::endl;
    std::ifstream in;
  }
};

int main()
{
   Foo<int> MyFoo("Hello World");
   return 0;
}

我的问题是这仅仅是一个 VS2010 错误还是我正在做的事情导致了这个?

4

0 回答 0