C++分配指向结构的指针数组

C++ allocating an array of pointers to struct

本文关键字:指针 数组 结构 分配 C++      更新时间:2023-10-16

我正在编写一个程序,该程序需要具有指向struct SMesh的指针数组,特别是

SMesh **mesh_arr;

当我使用数组中只有一个指针的实例时,一切都很好。但是当我尝试使用有两个(或更多)实例时,瓦尔格林德对"Invalid write of size..."发疯了。我像这样初始化它(计数器是我需要指针的 SMeshe 的数量):

SMesh **mesh_arr = new SMesh*;
for (int i = 0; i < counter; i++) mesh_arr[i] = new SMesh;

并像这样删除它:

delete mesh_arr;

我是否以错误的方式删除了它或我错过了某些内容?

您必须分配足够的元素才能拥有整个数组,而不仅仅是 1 个元素。

SMesh **mesh_arr = new SMesh*[counter];
for (int i = 0; i < counter; i++) mesh_arr[i] = new SMesh;
使用

new[] ,您必须使用delete[]将其删除。

delete[] mesh_arr;

另外,不要忘记删除分配的单个SMesh

您可以避免向量的指针问题。也无需显式删除。

#include <vector>
auto mesharr{std::vector<std::vector<SMesh>>(rows, std::vector<SMesh>(cols))};

new 语句中只分配了一个指向结构的指针。尝试

SMesh ** mesh_arr = new (SMesh*)[counter];