C++ C++;将指针数组分配给结构

C++ C++;将指针数组分配给结构,c++,arrays,pointers,struct,C++,Arrays,Pointers,Struct,我正在编写一个程序,它需要一个指向结构SMesh的指针数组 SMesh **mesh_arr; 当我处理数组中只有一个指针的实例时,一切都正常。但当我尝试使用拥有两个(或更多)的实例时,Valgrind会疯狂地使用“大小无效写入…”。 我这样初始化它(计数器是我需要指针指向的SMeshes数): 我是以错误的方式删除它,还是遗漏了什么?您必须分配足够的元素来包含整个数组,而不仅仅是一个元素 SMesh **mesh_arr = new SMesh*[counter]; for (int i =

我正在编写一个程序,它需要一个指向
结构SMesh
的指针数组

SMesh **mesh_arr;
当我处理数组中只有一个指针的实例时,一切都正常。但当我尝试使用拥有两个(或更多)的实例时,Valgrind会疯狂地使用
“大小无效写入…”
。 我这样初始化它(计数器是我需要指针指向的SMeshes数):


我是以错误的方式删除它,还是遗漏了什么?

您必须分配足够的元素来包含整个数组,而不仅仅是一个元素

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

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

您在
新的
语句中只分配了一个指向您的结构的指针。试一试

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

使用向量可以避免指针问题。也不需要显式删除

#include <vector>

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

您是指指向指针的指针**ptr'new'和'delete'在我的C编译器中生成错误。
delete[] mesh_arr;
SMesh ** mesh_arr = new (SMesh*)[counter];
#include <vector>

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