我正在编写一个程序,需要有一个指向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;
我是以错误的方式删除它还是错过了什么?
答案 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];