valgrind and throw exception

在C++的代码段中,使用了throw来抛出异常,这是一种非常不好的方法。

一般我们使用C++代码,或多或少都使用到了STL,而抛出异常的时候,STL里面的容器来不及调用析构函数,导致valgrind会报blocks are possibly lost的警告信息,这使本身代码存在的一些问题被长长的possibly lost给忽略掉,因此建议在C/C++代码中少抛出异常,而使用返回值。
对于STL,也有一种方法强制内存的释放,详情可见valgrind官方的FAQ文档

  • With GCC 2.91, 2.95, 3.0 and 3.1, compile all source using the STL with -D__USE_MALLOC. Beware! This was removed from GCC starting with version 3.3.

  • With GCC 3.2.2 and later, you should export the environment variable GLIBCPP_FORCE_NEW before running your program.

  • With GCC 3.4 and later, that variable has changed name to GLIBCXX_FORCE_NEW.

那么去除valgrind里面的警告,即需要设置环境变量:
export GLIBCXX_FORCE_NEW=1
且需要重新编译一下程序。

Categories

| | 评论(0)

发表评论

August 2012

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

关于此日记

此日记由 Cnangel 发表于 July 25, 2012 11:15 AM

此Blog上的上一篇日记log4cpp 1.1.0 patch

此Blog上的下一篇日记Halide - 图像处理的语言

首页归档页可以看到最新的日记和所有日记。

归档

Powered by Movable Type 5.14-en