检查内存泄漏C - OS X 10.9 Xcode

时间:2014-04-12 16:30:29

标签: c xcode memory-leaks osx-mavericks instruments

我正在使用通用链接列表在C中创建一个简单的字典,因此在我使用mallocfree的过程中。

无论如何,Valgrind遗憾地不支持OS X 10.9,因此我正在使用Xcode的Leaks Instrument。但是,我对理解这个工具为我提供的反馈有点麻烦。更简单,从数据输出我无法理解是否有泄漏。

以下是该工具告诉我的截图:

enter image description here

link to image

以下是创建链接列表的代码:

typedef struct Element {
    struct Element *next;
    void *value;
} TElelemt, *TList, **AList;

typedef void (*PrintF) (void *);

int Insert_Elm(AList list, void *value, size_t dimension) {
    TList aux = (TList) malloc(sizeof(TElelemt));

    if (!aux) {
        printf("Allocation error!\n");
        return 0;
    }

    aux->value = malloc(dimension);
    if (!aux->value) {
        printf("Allocation error!\n");
        return 0;
    }

    memcpy(aux->value, value, dimension);
    aux->next = *list;
    *list = aux;

    return 1;
}

void Delete_Elm(AList list) {
    TList elm = *list;

    if (!elm) {
        return;
    }
    free(elm->value);
    *list = elm->next;
    free(elm);

    return;
}

void Delete_List(AList list) {
    while (*list) {
        Delete_Elm(list);
    }

    return;
}

// In main() I am doing something like this where TWord cuv is allocated in stack:
    for (i = 0; i < 1000000; i++) {
        Insert_Elm(&list, &cuv, sizeof(TWord));
    }
    Delete_List(&list);

该工具说什么,是否有任何内存泄漏?

1 个答案:

答案 0 :(得分:2)

您的屏幕截图显示没有内存泄漏。在您的屏幕截图中,Allocations仪器以蓝色显示您的内存使用情况。如果仪器检测到任何内存泄漏,它会在图表中显示泄漏仪器。但是在截图中,Leaks仪器的图表是空白的,这意味着Instruments检测到没有内存泄漏。

另外一件事,您的屏幕截图显示了Allocations工具的统计信息。它告诉你程序分配的内存量。从仪器列表中选择Leaks仪器以查看Leaks仪器的统计数据。选择Leaks仪器还会告诉您是否检测到任何内存泄漏。如果您有任何泄漏,仪器将在图表下方的表格中列出它们。