以这种方式定义结构体后,我需要分配内存
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*
)的大小做同样的操作。