在c++中,我可以创建具有固定列数(例如5)的2D数组,如下所示:

char (*c)[5];

然后我可以为行分配内存,如下所示
c = new char[n][5];

其中n可以是任何变量,即使在运行时也可以为其赋值。我想知道是否以及如何使用此方法为每行动态分配可变数量的内存。即我想这样使用第一条陈述,但可以修改第二条陈述。

最佳答案

您将创建一个指向指针的指针,而不是指向数组的指针,该指针将由一个指针数组填充,而该指针的每个元素又将由一个字符数组填充:

char ** c = new char*[n];  // array of pointers, c points to first element

for (unsigned int i = 0; i != n; ++i)
    c[i] = new char[get_size_of_array(i)]; // array of chars, c[i] points to 1st element

稍微多一些的C++数据结构将是std::vector<std::string>

正如您在注释中所注意到的那样,分配给new[]的动态数组无法调整大小,因为在C++中没有realloc的类似物(如果考虑的话,它对对象模型没有意义)。因此,与任何手动进行动态生命周期管理的尝试相比,您应该始终偏向于使用合适的容器。

总结:不要使用new。曾经使用适当的动态容器。

09-17 12:41
查看更多