簡體   English   中英

免費動態分配內存

[英]free dynamically allocated memory

int i;
char *s = (char*)malloc(sizeof(char)*10);
for(i = 0; i <= 4; ++i)
    s[i] = 'a';
s[5] = '\0';
printf("%s\n", s);
free(s).

上面的代碼會有內存泄漏問題嗎? 函數“free”如何知道需要釋放多少內存?

代碼中沒有內存泄漏。 關於你的第二個問題,當你調用malloc ,更多的事情發生在你身上。 C庫保留了一些空間來放置自己的標題和簿記信息,這樣當你free撥打它時它可以做正確的事情。

關於您的代碼的一些編輯說明:

  • 你不需要在C程序中malloc()的返回值。 void *malloc()返回)和其他指針類型之間的轉換隱含在C.

  • sizeof(char)1 ,為什么還要寫出來呢?

  • 你的循環將三個字符寫入s ,然后你的程序在添加\\0之前跳過一個字符( s[4] )。 這有點奇怪。 你的意思是在你的循環中使用i <= 4 ,或者之后可能s[4] = '\\0'嗎?

  • 你有一個. 而不是; 在你的free()電話之后。 我想這只是一個錯字,而不是在你的程序中,因為它不會以這種方式編譯。

它不會泄漏。 庫知道要釋放多少,因為它在內部跟蹤每個塊的分配大小。 它的具體的方式是一個實現細節可以從改變mallocmalloc各個版本,甚至,你不應該與它有關。

不,你最后自由了,你不會使用超過s。 我會說你沒事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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