更正结构的内存分配

时间:2011-12-08 21:20:01

标签: c memory-management malloc calloc

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

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

所以我带了这个代码,是不是我错过了什么?首先分配结构描述符,然后为指向字符串

的指针分配足够的空间
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;
}

2 个答案:

答案 0 :(得分:2)

只要将x替换为sc,就可以了。但是,您不应该在C中转换malloc(阅读更多here)。我想改为那条线:

sc = malloc(sizeof(*sc));

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

答案 1 :(得分:2)

编辑的代码基本上是正确的,虽然我和你有几个风格差异(例如没有使用typedef来隐藏对象的“指针”,而不是使用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;
}