【问题标题】:Memory leak in Program to Rotate an image旋转图像的程序中的内存泄漏
【发布时间】:2015-10-19 06:26:01
【问题描述】:

我是 C++ 编程新手,我编写了一个旋转图像的程序。图像的输入是 ppm 格式。我的主函数或具有以下签名的旋转函数中存在内存泄漏:

     <vector> rotate(picture);

我尝试使用 valgrind 进行大量调试,但无法发现问题,这是代码的简化可执行版本:http://ideone.com/vHjv

谁能帮帮我,谢谢

注意:代码可能看起来很长,泄漏在 rotate() 函数或 main() 的末尾。我不知道是什么导致了泄漏。

【问题讨论】:

  • 各位读者,我只是不问这个问题,因为我懒得调试或类似的东西,我已经尝试了很多,但我无法找到问题。希望你能理解,谢谢
  • 当您已经将 ppm.pixels 的值获取到 newPixel 时,不确定为什么您的旋转函数中有 myMemCpy( ppm.pixels, newPixel, ppm.size * sizeof (Pixel) );。当您在堆上通过char *temp = new char[n] 分配内存时,这可能会导致内存泄漏。
  • @macroland 我有 myMemCpy 函数,因为我想将 newPixel 复制到 ppm.pixels。因为 newPixel 是一个局部变量,我将摆脱它
  • 如果您打算旋转通过引用传递的PpmArray&amp; ppm,为什么不在rotate 函数中通过循环直接访问ppm.pixels 数组并将新像素值复制到其中。我又猜想memcpy 导致了内存泄漏。
  • 您可以进一步将代码缩减为最小示例。将最小示例作为示例的一部分而不是在链接后面发布。

标签: c++ memory-leaks


【解决方案1】:

在函数myMemCpy 中,您忘记释放temp。标准库中有一个复制数组的函数。它的名字非常贴切:std::copy。我建议你使用它而不是你的泄漏版本。要进一步降低泄漏风险,请使用 std::vector 而不是指向原始数组的指针。

【讨论】:

  • 使用 copy 出现错误,你会如何使用它?
  • @Jimmy 你尝试了什么?
  • 复制(开始、结束、图像); ?
  • @Jimmy 是的,你就是这么称呼它的。我建议您查看错误消息。
  • 目标和源参数在哪里? ; dest:图像在那里,但来源在哪里?
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2012-03-12
  • 2021-03-11
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多