以这种方式定义结构,我需要分配内存
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;
}
答案 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;
}