xmalloc毒药的目的是什么?

时间:2015-11-17 17:36:41

标签: c malloc

我正在阅读git的源代码。我对此xmalloc实施进行了详细介绍。

static void *do_xmalloc(size_t size, int gentle)
{
    void *ret;

    if (memory_limit_check(size, gentle))
        return NULL;
    ret = malloc(size);
    if (!ret && !size)
        ret = malloc(1);
    if (!ret) {
        try_to_free_routine(size);
        ret = malloc(size);
        if (!ret && !size)
            ret = malloc(1);
        if (!ret) {
            if (!gentle)
                die("Out of memory, malloc failed (tried to allocate %lu bytes)",
                    (unsigned long)size);
            else {
                error("Out of memory, malloc failed (tried to allocate %lu bytes)",
                      (unsigned long)size);
                return NULL;
            }
        }
    }
#ifdef XMALLOC_POISON
    memset(ret, 0xA5, size);
#endif
    return ret;
}

我想知道这部分的目的是什么:

#ifdef XMALLOC_POISON
    memset(ret, 0xA5, size);
#endif

2 个答案:

答案 0 :(得分:1)

这是一种轻松查看您是否使用未初始化内存的方法。如果您使用内存并且所有内容(或大部分内容)都是0xA5,那么您就知道内存未被初始化并且您有未定义的行为。

答案 1 :(得分:1)

如果定义了宏XMALLOC_POISON,该函数不仅会分配内存,还会将内存中的值初始化为(看起来是什么)任意垃圾值。这可能是调试由未初始化变量引起的问题的有用技术。