簡體   English   中英

在C中分配的指針上進行malloc安全嗎?

[英]Is it safe to malloc on an allocated pointer in C?

我正在使用C庫,並且正在對內存管理非常謹慎。 我有一個為指針分配內存的函數,並且試圖覆蓋指針已經分配的情況。 我想知道是否需要在分配指針之前釋放指針。

char *x = (char *) malloc(12);
// ...
free(x);
x = (char *) malloc(12);

我不確定free(x)是否必要。

沒有分配指針。

char *x = (char *) malloc(12); 聲明一個指針x 然后,它分配12個字節的內存,並使x指向12個字節的內存。

free(x); 釋放12個字節的內存。 x仍指向現在已釋放的12個字節的內存。

x = (char *) malloc(12); 分配另外12個字節的內存,並使x指向新的12個字節的內存。

如果刪除了free(x); 那么您將分配2個12字節的內存批次,而不釋放第一批內存。 這是否是內存泄漏取決於程序的工作方式-如果您還不使用內存來處理某些事情,那僅僅是內存泄漏。

是的,需要free(x) 如果刪除它,那么當您下次執行malloc(12)時,肯定會泄漏內存。 現在,如果大小確實相同,那么我質疑您是否真的需要第二個malloc 如果大小不同,則可以使用realloc()並刪除free

是安全的,也就是說:您不會招致任何未定義的行為。 但是,如果您沒有保存第一個malloc()給出的地址,則會泄漏內存,因為在以后的某個時候應該是free() d。

如果不這樣做的free()並不危險,但你不能從這種狀態中恢復過來,因為你失去了參考,其中的內存塊是內存,所以你不能稍后返回它(它是由要求 free()

如果您不控制返回給您的內存,而您的程序執行了這種行為,那么您最終可能會吃光進程可用的所有內存,這可能會影響整個系統。

暫無
暫無

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

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