C ++为struct分配一个指针数组

时间:2016-03-19 13:23:41

标签: c++ arrays pointers struct

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

SMesh **mesh_arr;

当我使用数组中只有一个指针的实例时,一切正常。但是当我尝试使用有两个(或更多)它们的实例时,Valgrind会对"Invalid write of size..."感到疯狂。 我像这样初始化它(计数器是我需要指针的SMeshes的数量):

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

并将其删除:

delete mesh_arr;

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

3 个答案:

答案 0 :(得分:3)

你必须分配足够的元素来拥有整个数组,而不仅仅是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

答案 1 :(得分:0)

您可以避免向量指针问题。无需明确删除。

#include <vector>

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

答案 2 :(得分:-1)

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

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