代码之家  ›  专栏  ›  技术社区  ›  goldenmean

内存相关错误

  •  1
  • goldenmean  · 技术社区  · 16 年前

    我的工作主要是学习C语言。我遇到了许多问题,并花了很多时间调试与动态分配内存损坏/覆盖相关的问题。与malloc(A)类似,它是一个字节,但使用write多于一个字节。为此,当我读到以下内容时,我试图读到一些东西:-

    1.)一种分配比所需内存更多内存的方法。并在额外位置写入一些已知值/模式。然后在程序执行期间,该模式应该保持不变,否则它表示内存损坏/覆盖。但是这种方法是如何工作的呢。这是否意味着对于使用malloc()分配的指针的每一次写入,我都应该对额外的sentinel模式进行内存读取,并读取其合理性?那会使我的整个程序非常慢。 说我们可以从代码的发布版本中删除这些检查,也没有什么效果,因为与内存相关的问题在“真实场景”中可能会发生得更多。我们能处理好吗?

    2.)我听说有一种叫做HEAP WALKER的东西,它可以让程序检测与内存相关的问题?怎样才能做到这一点呢。

    非常感谢。

    -广告。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Charles Eli Cheese    16 年前

    内存保护可以捕获一些堆损坏。它比较慢(尤其是释放),但它只是为了调试目的,并且您的发布版本不会包括这一点。

    堆遍历是特定于平台的,但不一定太有用。最简单的检查就是简单地包装您的分配并使用 线 有关调试模式的信息,以及大多数泄漏都会在退出程序时很快显现出来,并且数字不符合要求。

    搜索谷歌 线 我相信会有很多结果出现。

        2
  •  3
  •   Gregory Pakosz    16 年前

    如果您在Linux或OSX下工作,请查看 Valgrind (免费,可通过OSX获得) Macports Rational PurifyPlus (需要许可证)。

    Dmalloc 甚至在 Paul Nettle's memory manager 这有助于跟踪与内存分配相关的错误。

        3
  •  1
  •   Mike    16 年前

    libgmalloc . libgmalloc将每个内存分配放在单独的页上。任何超出页面的内存访问/写入都将立即触发总线错误。但是请注意,使用libgmalloc运行程序可能会导致显著的速度减慢。