簡體   English   中英

返回已分配的變量

[英]Return an allocated variable

我知道我們應該釋放任何用malloc分配的變量,但如果我在函數中返回它會怎么樣? 像這樣的東西:

char *somefunction(int somearg){
    char *str;

    str=(char *)malloc(sizeof(char *));

    //some code

    return str;
}

我應該免費嗎? 我怎么能這樣做?

你有兩個選擇:一個,將char *傳遞給某個函數並使用它而不是在某個函數中分配,或者兩個,稍后釋放返回值。

第一種選擇:

char *somefunction(char *str, int somearg){

    //some code

    return str;
}

// Elsewhere...
char *str = (char *) malloc....;
somefunction(str, 123);
// Code...
free(str);

第二種選擇:

char *somestr = somefunction(123);
// Do something...
free(somestr);

我個人建議使用第一個選項,因為當它沒有在仲裁函數中分配時,更容易避免泄漏內存。

完成后你可以釋放它。 沒有規則說與malloc()匹配的free()必須在同一個函數中。

你應該釋放所有分配的空間,但如果你返回它,因為你將在程序的其他部分使用這些內存空間,所以在你使用之后你應該釋放。 查看調用該函數的代碼中的每個位置,並在使用返回的值后釋放空間。

如果你打算返回塊的地址,你不應該釋放()塊,而是依賴於調用代碼以后釋放()它。 這叫做onwership傳遞。

如果在函數中釋放它並返回指針,則調用代碼將在嘗試訪問已釋放的塊時遇到未定義的行為。

這是一些現有函數(例如strdup()的實踐,但通常是個壞主意。 要求用戶了解函數調用內部發生的事情是一個不好的要求 - 想想你使用了多少函數是誰的內部隱藏對你。 一般來說,您需要讓用戶傳入緩沖區和大小,而不是為它們分配內存。

暫無
暫無

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

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