正确分配结构体的内存



以这种方式定义结构体后,我需要分配内存

typedef struct string_collection {
    char **c;
    size_t current, allocated;
} TSC, *ASC;

所以我带着这个代码来了,它是对的还是我错过了什么?首先分配结构描述符,然后为指向string

的d个指针分配足够的空间
ASC AlocSC(size_t d)
{
    ASC sc;
    sc = (TSC*) malloc(sizeof(TSC));
    if (!sc) return NULL;
    sc->c = calloc(d, sizeof(char *));
    if (!sc->c) {
        free(sc);
        return NULL;
    }
    sc->current = 0;
    sc->allocated = d;
    return sc;
}

编辑后的代码基本上是正确的,尽管我与您在风格上存在一些差异(例如没有使用类型定义来隐藏对象的"指针性",没有在malloc/calloc调用中使用分配对象的大小,以及其他一些事情)。

你的代码,"清理"了一下:

TSC *AlocSC(size_t d)
{
    TSC *sc = malloc(sizeof *sc);
    if (!sc) return NULL;
    sc->c = calloc(d, sizeof *sc->c);
    if (!sc->c) {
        free(sc);
        return NULL;
    }
    sc->current = 0;
    sc->allocated = d;
    return sc;
}

只要用sc代替x,在我看来就没问题了。但是,您不应该在C中转换malloc的返回值(在这里了解更多)。我将在这行中改为:

sc = malloc(sizeof(*sc));

您可以对类型x->c指向(char*)的大小做同样的操作。

相关内容

  • 没有找到相关文章

最新更新