我正在使用通用链接列表在C中创建一个简单的字典,因此在我使用malloc
和free
的过程中。
无论如何,Valgrind遗憾地不支持OS X 10.9,因此我正在使用Xcode的Leaks Instrument。但是,我对理解这个工具为我提供的反馈有点麻烦。更简单,从数据输出我无法理解是否有泄漏。
以下是该工具告诉我的截图:
以下是创建链接列表的代码:
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);
该工具说什么,是否有任何内存泄漏?
答案 0 :(得分:2)
您的屏幕截图显示没有内存泄漏。在您的屏幕截图中,Allocations仪器以蓝色显示您的内存使用情况。如果仪器检测到任何内存泄漏,它会在图表中显示泄漏仪器。但是在截图中,Leaks仪器的图表是空白的,这意味着Instruments检测到没有内存泄漏。
另外一件事,您的屏幕截图显示了Allocations工具的统计信息。它告诉你程序分配的内存量。从仪器列表中选择Leaks仪器以查看Leaks仪器的统计数据。选择Leaks仪器还会告诉您是否检测到任何内存泄漏。如果您有任何泄漏,仪器将在图表下方的表格中列出它们。