代码之家  ›  专栏  ›  技术社区  ›  Chris Becke

gcc/xcode相当于crteckmemory?

  •  1
  • Chris Becke  · 技术社区  · 15 年前

    当处理随机内存覆盖时,在MSVC中,可以通过调用crteckmemory来验证堆的各个点的状态,并且至少有一小部分的信心知道在检查之前的代码不会对任何可能导致new或malloc稍后失败的错误负责。

    在Xcode中,尝试在内存覆盖中装箱的等效方法是什么?我现在所拥有的只是一个对新代码的调用的随机失败,在一些代码的内部深处的某个地方,不知道代码在一个损坏的堆中运行了多长时间。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Fabio Fracassi    15 年前

    因为这只是尼尔的答案中的暗示,所以让我们明确地说:

    据我所知,没有任何工具可以像gcc的crtchemory那样容易获得。 IIRC有一些已检查过的malloc库,但我没有发现它们像crtcheckmemory那样可用。 但是 Valgrind 不受干扰地部署,并且 你在整个结果中表现得更出色。

        2
  •  0
  •   Chris Becke    15 年前

    这个特性实际上是内置在gcc的堆中的。 如上所述 here 启用它的最简单方法是在xcode::run菜单上: Enable Guard Malloc

        3
  •  -1
  •   anon    15 年前

    这并没有直接回答你的问题,但我觉得必须回答。正如您所说,像CRT检查函数这样的工具只会给您一个很小的信心,而不会解决除内存之外的资源泄漏问题。如果你发现自己依赖于这样的工具,我会说你的C++开发方法有一些非常非常错误的地方。在过去的10年里,我的代码中没有与内存泄漏相关的任何一个问题。这不是因为我是C++代码的上帝,而是因为我使用RAI中的基本工具、智能指针和标准库集合在我的代码中,并且在任何可能的地方避免使用显式的动态内存分配。 new . 每当你发现自己在写一行代码,比如:

    Something * p = new Something;
    

    停下来问问自己,“有什么方法可以避免这样做吗?”如果答案是“否”,那么问问你自己为什么要给一个原始指针分配内存,如果你找不到任何方法来解决这个问题(这种情况很少发生),立即编写代码来管理指针的去分配,并确保代码是异常安全的。

    如果采用这种方法,您将不需要特殊的CRT功能或Valgrind之类的工具,并且可以节省大量调试时间。