【发布时间】:2015-07-01 16:09:36
【问题描述】:
我有一些代码来创建一个新结构并为结构数组分配一些空间。最初,我为数组上的 1 个结构分配空间:
static int datasetCount = 0;
int datasetgroup_new(DatasetGroup *dg char *id){
dg->id = id;
// Allocate space for a single dataset to start with
dg->datasets = (Dataset *) malloc(sizeof(Dataset));
return 0;
}
然后我有一个函数可以将另一个结构('dataset')添加到包含数组的结构中。在函数结束时,我重新分配数组以提供另一个空间:
void datasetgroup_add(DatasetGroup *dg, string filePath){
// Create the dataset
Dataset ds;
dataset_new(&ds, filePath);
// Copy the dataset to the dataset array
dg->datasets[datasetCount] = ds;
// Increment the dataset counter
datasetCount++;
//Grow the array
dg->datasets = (Dataset *)realloc(dg->datasets, sizeof(Dataset) * (datasetCount + 1));
}
我一直在阅读暗示在现代 C 中你不需要做这样的事情的东西。 我可能是错的......那么更现代/更正确的方法是这样做吗?
编辑:
抱歉,为了清楚说明我没有使用 C++ 类型,我为 string 创建了一个 typedef:
typedef char* string;
【问题讨论】:
-
你在哪里读到的?在 C++ 中,你有
new和delete,但在 C 中没有这样的东西。 -
通常该方法对 C 是正确的。您可以使用一个库来隐藏所有麻烦。
-
而且,如果您实际使用 C++,我建议您查看标准 containers library 并使用更适合您特定需求的容器
-
不,字符串是:
typedef char* string。对不起,我会编辑得更清楚 -
但这只是一个帮助器,一个包装器,它在内部执行与您代码中相同的无聊操作。