32位CPU处理器中的内存泄漏,64位处理器CPU中没有泄漏

时间:2011-01-31 12:17:42

标签: c gcc memory-leaks

我有一个C代码,在64位CPU处理器中没有任何内存泄漏但在32位处理器中显示泄漏。可能是什么原因。 GCC 4.1.2是编译器,Debian是操作系统。

3 个答案:

答案 0 :(得分:6)

这听起来很奇怪。但对我来说,回答太模糊了。既然你在Linux上,我建议你只需在Valgrind下运行32位版本,并进行最大内存跟踪。

答案 1 :(得分:3)

请记住,即使您自己的代码是相同的,您仍然运行两个不同的程序 - 它们链接的是不同的运行时库。可能是您的代码的某些方面在一个运行时而不是另一个运行时触发泄漏。如果是这种情况,可以采用以下两种方式之一:

a)你没有做任何糟糕的事情。问题出在32位运行时。

b)你有什么不对劲,但是在64位运行时防御的东西正在掩盖它。

答案 2 :(得分:1)

没有代码真的很难说。可能出错的事情

  • 隐式转化。在大多数地方,窄数据类型都会转换为signedunsigned。如果你对这些的宽度有隐含的假设,你可能会遇到各种各样的事情:溢出,未定义的行为,编译器特定的行为
  • 缺少功能原型。 oldish C假定它不知道的函数返回int。如果实际上它返回一个指针(例如)你有麻烦。
  • 指向int转化(或反过来)的指针

你的编译器很老了。如果可能的话,您可能应尝试获取更新的内容,或尝试使用clang之类的其他内容。

编译-Wall -Wextra上的所有警告...并处理您的代码,直到它完全没有任何警告为止。

如果您的问题仍然存在,请使用valgrind作为@unwind建议运行。

然后有一个具体问题回到这里,所以我们可以帮助你。