簡體   English   中英

如何管理C中函數返回的內存

[英]How to manage memory returned from function in C

我想制作一個像這樣工作的標記子程序:

  • 讀取用戶輸入
  • 找到令牌
  • 使用子字符串函數來獲取每個標記
  • 將每個標記存儲在結構中

這個想法很簡單(我想),但我提出了一個難題。 在創建子串函數時,我意識到它是一個內存泄漏漏洞。 我能想到創建子字符串函數的唯一方法是:

    char* sub = ( char* ) malloc ( ( some_length + 1 ) * sizeof( char ) );

    for ( i = start_index ; i < some_length ; i++ )
    {
         sub[ i - start_index ] = source_string[i];
    }

    sub[ some_length ] = '\0'

    return sub;

但問題是,當使用子字符串函數時,我將無法在之后釋放該內存。

    // Example usage

    TokenStruct* MyToken = CreateToken( substring( input , start , length ) );

有些人可能會建議我在CreateToken函數中釋放內存,但這對我來說似乎是一個非常糟糕的主意,因為它會使CreateToken的代碼非常依賴於子字符串函數。 此外,子字符串函數可能在許多其他函數中使用。

我有一個想法,在終止程序之前保留一個指針表並釋放它們但看起來有點粗略......

你們覺得怎么樣? 處理這類問題的最佳方法是什么?

提前致謝!

這是C和其他相同類型語言中非常常見的問題。 基本上有三種解決方案:

  1. 要么單獨進行呼叫,然后再釋放內存。
  2. 將指針保留在對象中(在您的情況下為MyToken ),並在釋放對象時釋放該字符串。
  3. 使用數組,並將其(最大長度)傳遞給函數。

由於創建的指針必須在對象( MyToken )的生命周期中“活動”,所以我建議使用方法二。

暫無
暫無

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

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