void x( )
{
strcpy(a, strdup(p) );
}(错误)使用strdup分配,strcpy不释放它
谁能告诉我上面的陈述有什么问题,为什么我会得到这个错误?
发布于 2011-09-09 19:17:01
问题是你正在泄漏内存。对strdup的调用将分配未释放的内存。传递给strcpy的指向内存的指针永远不会保存在任何地方,因此编译器可以证明它是泄漏的。
我不知道您要做什么,因为strdup既执行分配又执行复制,所以对strcpy的调用似乎是多余的。
发布于 2011-09-09 19:22:50
strdup做类似这样的事情(摘自paxdiablo's answer here) :-
char *strdup (const char *s) {
char *d = malloc (strlen (s) + 1); // Allocate memory
if (d != NULL)
strcpy (d,s); // Copy string
return d; // Return new memory}
因此,在strdup内部分配的内存泄漏会导致该错误。
发布于 2011-09-09 19:18:43
问题是strdup在内部调用malloc(),并将结果指针传递给您的代码。你的代码没有获得分配的内存的所有权,所以它被泄露了。您的代码大致就是这样做的:
char* duplicate = malloc(strlen(p)+1); //first part of strdup
memcpy(dupliate,p); //second part of strdup
memcpy(a, duplicate);//memcpy in your code上面的代码没有对duplicate指向的内存执行free()操作。
https://stackoverflow.com/questions/7360815
复制相似问题