C:内存分配 - 以下结构是一个天真的解决方法吗?

时间:2014-06-01 10:27:04

标签: c string pointers memory-management struct

我正在C中滚动自己的split,trim和其他实用程序字符串函数。 在翻找SO的同时,我确定了像strdup()这样的函数 一般,被认为是邪恶的,因为它分配内存(不像其他字符串函数 来自同一个图书馆。)

但是,我的函数似乎不可避免地以不分配内存的方式编写。我尽力解决这个问题。目前,我已经留下了所有的意见 单独的字符串(const),并返回一个指向新字符串并记录该字符串的指针 返回必须以后免费。

我在思考是否有更好的方法,这个想法让我感到震惊。我试图弄清楚它是否真的是一个好主意,或者它是否是一个天真的想法。这就是我的问题所在 以下解决方案建议?如果没有,怎么回事?

我的想法是这样,我将创建一个这样的结构:

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

将它用于我的所有字符串操作工作。在所有相关功能的最后,只是 在return语句之前,我将调用另一个函数,让我们在输入字符串上调用它destroy(它不是char指针,而是前面提到的struct)。该函数反过来会检查布尔值ìnitialized,表示这个 已分配内存,如果是,则随后将其释放。

1 个答案:

答案 0 :(得分:0)

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

该函数依次检查布尔值ìnitialized,表示已分配内存,如果是,则随后将其释放。

您不需要结构来执行此操作。使用空指针初始化您可能想要使用结构的任何char*指针,并且可以将其传递给free()realloc(),而不必怀疑它是否已经存在进一步分配。