静态数组的自由动态数组
Free dynamic array of static arrays?
我有类似于这个的代码
EDIT这个代码应该在接口上,所以只允许POD。没有矢量,没有容器。
int (*neco)[2];
int ahoj = 2;
neco = new int[ahoj+2][2];
int iter = 1;
for (size_t i = 0; i < 4; i++)
{
for (size_t j = 0; j < 2; j++)
{
neco[i][j] =iter;
iter++;
}
}
for (size_t i = 0; i < ahoj + 2; i++)
{
delete[] neco[i];
}
这不起作用。删除操作会删除未分配的内存。甚至连都没有
删除[]neco;
或任何其他删除。他们每个人都会在分配的块之前删除内存。
谷歌搜索和咨询办公室同事都没有结果
如何分配"点"(两个坐标(的动态数组,然后释放它们?
我能够通过使用不同的结构来解决问题。
但我显然能够分配内存。写入分配的内存…
如何正确释放此内存?(只是一个专业问题。(
指向动态分配内存的普通指针会给您带来麻烦。
使用std::unique_ptr
:
#include <memory>
// ...
std::unique_ptr<int[][2]> neco(new int[ahoj+2][2]);
并用delete[]
移除那个循环。
或者,使用std::vector<int[2]> neco(ahoj+2)
——它为您进行内存管理,并且可以调整大小。
一般规则是每个new
表达式都必须由一个相应的delete
表达式匹配。
您的new
表达式是语句的右侧
neco = new int[ahoj+2][2];
因此在语句中给出了相应的CCD_ 7表达式
delete [] neco;
如果这不起作用(这就是你所说的(,那就意味着问题出在其他一些表现出未定义行为的代码中。
您的环路
for (size_t i = 0; i < ahoj + 2; i++)
{
delete[] neco[i];
}
是不正确的,因为neco[i]
都不是new
表达式的结果。因此delete [] neco[i]
在每次循环迭代中都有未定义的行为。
鉴于您的代码示例和描述不完整,我怀疑其他人是否能提供更有用的建议。
此外,您错误地认为不能使用标准容器。你可以。
#include <vector>
int main()
{
std::vector<int[2]> avec(ahoj + 2);
int (*neco)[2] = &avec[0];
for (size_t i = 0; i < ahoj + 2; ++i)
{
for (size_t j = 0; j < 2; ++j)
{
neco[i][j] = iter;
++iter;
}
}
}
唯一的区别是avec
为您执行动态内存分配和释放。neco
仍然是根据API的需要(根据您的描述(指向数组的指针。这种方法的两个制约因素是:;
- 初始化
neco
后不要调整avec
的大小(或在调整avec
的大小时重新初始化neco
( - 在
avec
不存在之后不要使用neco
(因为行为将不定义(
此外,没有一个数组实际上是静态的。所以你的问题标题有误。
如果我能正确回忆,数组(动态或静态(基本上就是一个矩阵。
因此,学术界的答案是:
分配内存的方法与分配内存的方式相同(首先分配数组数组的内存,然后使用for
分配数组内数组的内存(,要释放内存,需要在for
中删除数组内存,然后在简单的delete
中释放动态数组的内存。
因此:
arrayOfArrays[[array1][array2][array3][array4]]
表示:分配arrayOfArrays
的内存,然后在循环中,分配array(number)
的内存
反之亦然。
单个句子中arrayOfArrays
的自由记忆。
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结