簡體   English   中英

strsep()之后如何釋放內存?

[英]How to free memory after strsep()?

我寫了這個函數:

char** parse_parameters(const char* input_string, int num_params, char** params) {
    char *temp_string = strdup(input_string);
    char **pp;
    for (pp = params; (*pp = strsep(&temp_string, ";")) != NULL;) {
        if (**pp == '\0')
            break;
        pp++;
        if (pp >= &params[num_params])
            break;
    }
    free(temp_string);
    return params;
}

我正在使用這樣的:

char *parameters[3];
parse_parameters("some;delimited;string", 3, parameters);

根據我對parameters數組內部的理解,我指向的是已經釋放的內存。 但是,如果我沒有在parse_parameters函數內部parse_parameters發生內存泄漏。 我該如何解決?

您有兩種選擇:

  1. 將其留給調用者以釋放params[0]並在函數的文檔中明確說明。
  2. input_string刪除constinput_string完成工作。 如果調用者想保留不變的副本,則調用者必須在調用函數之前進行復制。
  3. 調用者必須提供至少與temp_string一樣大的緩沖區才能用作工作區( parse_parameters額外參數)。 您將字符串復制到那里。

暫無
暫無

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

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