[英]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()
電話之后。 我想這只是一個錯字,而不是在你的程序中,因為它不會以這種方式編譯。
它不會泄漏。 庫知道要釋放多少,因為它在內部跟蹤每個塊的分配大小。 它的具體的方式是一個實現細節可以從改變malloc
到malloc
各個版本,甚至,你不應該與它有關。
不,你最后自由了,你不會使用超過s。 我會說你沒事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.