簡體   English   中英

Strdup()和strcpy

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM