【问题标题】:How to detect uninitialized memory (C++, windows, VS2005)?如何检测未初始化的内存(C++、windows、VS2005)?
【发布时间】:2011-11-21 04:21:41
【问题描述】:

我正在寻找能够调试未初始化内存的 Windows 内存调试器。

有一个代码sn-p(C++):

class Temp{
public:
 Temp(double d) : m_double(d){};

 double m_double;
 float m_float;
};

int _tmain(int argc, _TCHAR* argv[])
{
 double temp;
 std::cout << temp <<std::endl;

 Temp temp2(2.0);
 std::cout << temp2.m_double <<std::endl;
 std::cout << temp2.m_float <<std::endl;

 int num1, num2;
 num1 = num2 + 1;

 return 0;
}

理想的功能:

  • 动态内存调试器,而非静态分析工具
  • 图形界面
  • 免费
  • 与VS2005集成
  • 使用简单

尝试使用:

  • Rational Purify v.7.0.0.0 build:6274
  • 内存验证器 v.5.12
  • cppcheck - 在给定的 sn-p 上运行良好,但对真正的大项目没有帮助

UPD:在使用动态内存调试器打开优化的情况下,似乎无法在释放模式下找到未初始化的内存。将在调试模式下尝试。

【问题讨论】:

标签: c++ windows debugging memory initialization


【解决方案1】:

过去我曾使用 Purify 来解决各种内存问题,而且效果很好。缺点是 $$$$。

如果可以的话,后端的 Linux 端口可以使用 valgrind,这也是一个很棒的工具。

【讨论】:

  • 我在给定的代码 sn-p 上使用了 Rational Purify v.7.0.0.0 build:6274,但它失败了。
【解决方案2】:

我认为这个问题更多地与静态代码分析器有关。我在项目设置中看到了来自 Visual Studio 的此类警告,警告级别最高,但我不确定 vs2005。

您也可以尝试使用question 中关于代码分析器的一些工具。

【讨论】:

  • 感谢您的评论。实际上我使用了 cppcheck,它对于给定的 sn-p 工作正常,但对真正的大项目没有帮助,所以我更喜欢动态内存调试器,而不是静态分析工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多