如何在cpp中删除(免费)多维结构内存?
How to delete (free) multi dimensional struct memory in cpp?
struct grid{
char symbol;
int row;
int col;
};
在主函数中:
grid** gr=new gr*[ROW]; //memory allocation
for(int i=0;i<ROW;i++){
gr[i]= new grid[COL];
}
我想从结构 gr 中删除特定(不是全部(符号。 例如
delete[] gr[i][j];
我试过了:
delete[] gr[i][j].symbol;
delete[] gr[i][j].row;
delete[] gr[i][j].col;
我也尝试过:
delete[] gr[i][j];
它都没有奏效。我已经读到我需要先删除内部元素,然后删除结构本身,但我不想完全删除结构。如何删除我的一些二维结构数组?
首先是一些基础知识:
要删除它,您需要做相反的事情。
对于每次调用 new,都必须有一个要删除的调用。
grid** gr=new gr*[ROW]; //memory allocation
for(int i=0;i<ROW;i++){
gr[i]= new grid[COL];
}
反转这个:
for(int i=0;i<ROW;i++){
delete [] gr[i];
}
delete [] gr;
因此,这可以让您了解可以调用删除的内容。 您只能删除通过 new 创建的内容。
问题解答
如果要擦除/删除项目,则必须手动将其后的所有元素复制回一个空格(或者要定义擦除的语义(。
假设我想在[1][5]
放轻松项目。这意味着[1][6]...[1][COL - 1]
处的项目必须全部向后移动一个空格,以填充已删除的项目。没有特殊的命令,您必须手动执行此操作。
for(int loop = 6; loop < COL; ++loop) {
gr[1][loop - 1] = gr[1][loop];
}
// Note you have not reduced the size of the array.
// So the least element still remains available.
但是进行手动内存管理不是一个好主意。这是学校项目练习的一部分吗?那么这很好,因为下一个类将自动化这一点。
但是,如果您在实际代码中执行此操作,那么您应该查看std::vector<>
你有一个交错数组。 它是一个指针数组。 每个指针依次指向一个元素数组。
不能在此数据结构中单独删除元素;它们是打包在行长度的缓冲区中的值。
删除一行只是delete[] gr[i]
,然后可能gr[i]=nullptr
,以便您可以注意到它丢失了。
当然,在现代C++中使用原始的new/delete是过时的;向量的向量,或者数组缓冲区的唯一ptrs向量,可能是一个更好的主意。
相关文章:
- 如何在C++类内存结构中创建"spacer"?
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 使用内存地址访问结构的属性值
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在cpp中删除(免费)多维结构内存?
- char*在结构内存分配中
- 初始化指针结构 - 内存中的外观
- 变量的块结构内存分配
- 最小化总结构内存
- 为多线程将结构内存分配给参数
- 释放组合结构内存的正确方法
- 结构内存分配问题
- C++对象与结构内存开销
- glvertexpinter-std::vector,结构内存opengl
- 结构内存布局 在 C 语言中
- C++结构内存布局和OpenGL glVertexPointer
- 图形数据结构内存管理
- 结构内存限制
- C++结构内存分配
- c++结构内存泄漏