簡體   English   中英

C:內存分配-以下結構是否是幼稚的解決方法?

[英]C: Memory allocation - Is the following struct a naive workaround?

我目前正在用C滾動自己的split,trim和其他實用程序字符串函數。在四處搜尋時,我確定像strdup()這樣的函數通常被認為是邪惡的,因為它會分配內存(與其他字符串函數不同)。相同的庫)。

但是,似乎無法避免以不分配內存的方式編寫我的函數。 我正在盡力解決這個問題。 當前,我將所有輸入字符串(const)留空了,並返回了一個指向新字符串的指針,並記錄了返回必須稍后釋放的情況。

我正在考慮是否有更好的方法,這個主意打動了我。 我試圖弄清楚這實際上是一個好主意還是天真。 我的問題就在這里,以下解決方案是否明智? 如果沒有,怎么來?

我的想法是這樣,我將創建一個這樣的結構:

typedef struct string {
    char *str;
    bool initialized;
} string;

用它來完成我所有的字符串操作工作。 在所有相關函數的結尾,在return語句之前,我將調用另一個函數,在輸入字符串上將其稱為destroy (不是char指針,而是上述結構)。 該函數依次檢查布爾值“ ìnitialized ,它表示已分配內存,如果已分配,則隨后釋放它。

typedef struct string {
    char *str;
    bool initialized;
} string;

該函數依次檢查布爾值“ ìnitialized ,它表示已分配內存,如果已分配,則隨后釋放它。

您不需要執行此操作的結構。 使用空指針初始化您可能想要使用其結構的任何char*指針,然后可以將其傳遞給free()realloc()而不必懷疑它是否已被進一步分配。

暫無
暫無

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

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