首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Strdup()和strcpy

Strdup()和strcpy
EN

Stack Overflow用户
提问于 2011-09-09 19:15:06
回答 3查看 15.9K关注 0票数 4
代码语言:javascript
复制
void x( )
{
    strcpy(a, strdup(p) );
}

(错误)使用strdup分配,strcpy不释放它

谁能告诉我上面的陈述有什么问题,为什么我会得到这个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 19:17:01

问题是你正在泄漏内存。对strdup的调用将分配未释放的内存。传递给strcpy的指向内存的指针永远不会保存在任何地方,因此编译器可以证明它是泄漏的。

我不知道您要做什么,因为strdup既执行分配又执行复制,所以对strcpy的调用似乎是多余的。

票数 10
EN

Stack Overflow用户

发布于 2011-09-09 19:22:50

strdup做类似这样的事情(摘自paxdiablo's answer here) :-

代码语言:javascript
复制
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内部分配的内存泄漏会导致该错误。

票数 3
EN

Stack Overflow用户

发布于 2011-09-09 19:18:43

问题是strdup在内部调用malloc(),并将结果指针传递给您的代码。你的代码没有获得分配的内存的所有权,所以它被泄露了。您的代码大致就是这样做的:

代码语言:javascript
复制
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()操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7360815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档