[英]Strdup() and strcpy
void x( )
{
strcpy(a, strdup(p) );
}
(錯誤)使用strdup進行分配,strcpy不會釋放它
誰能告訴我上面的陳述有什么問題以及為什么我會收到這個錯誤?
問題是你正在泄漏記憶。 對strdup
的調用分配了未釋放的內存。 傳遞給strcpy
的內存指針永遠不會保存在任何地方,因此編譯器可以證明它已泄露。
我不確定你要做什么,因為strdup
執行分配和復制,對strcpy
似乎是多余的。
strdup做類似的事情(取自paxdiablo的回答) : -
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中分配的內存會導致該錯誤。
問題是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
上面的代碼沒有free()
duplicate
指向的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.