簡體   English   中英

正確的釋放記憶的方法

[英]Correct way to free memory

因為我已經做了一些C而且我必須刷新對指針的理解,這需要一段時間。 這是一個修改指針內容的函數。 問題是這段代碼是否正確。 如果我只釋放指針或者我必須釋放指針的內容就足夠了

void foo(char **str) {
   // str has been allocated enough bytes for the following text
   *str = "allocate some text";
}

int main(int arc, char *argv[]) {
    char *someString;
    foo(&someString);
    free(someString); // is this the correct place to free
}

謝謝。

不,你不想調用free() ,因為你從來沒有malloc() ed數據。 更具體地說,在指向字符串文字的指針上調用free()導致未定義的行為

在這種情況下,你根本不應該自由。 free()應始終對應於對malloc()函數的調用。

在這里,你可以“釋放”從未首先分配的常量內存。

在這段代碼中有些東西讓我感到困惑。

為什么評論說“str已被分配足夠的字節用於以下文本”? 即使已經分配了,你也要為指針分配一個新值,所以它不會給你帶來任何分配了那個內存的東西。

無論如何,根據這段代碼,不應該調用free()

你沒有在你的代碼中顯示,但你寫的str已經分配了足夠的字節。 所以這很好,並且可以free編輯,但是將指針指向常量字符串為str - *str = "allocate some text"; (正如oli所說,在free上導致未定義的行為)而不是執行strcpy()

strcpy(str, "allocate some text");

首先應該調整方法foo的調用,因為參數不匹配。 它應該看起來像

foo(&someString);

但就個人而言,我會同意你free(someString)調用方法的地方free(someString) 因為應用程序即將結束,您不再需要任何指針。

暫無
暫無

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

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