Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以释放分配给多维数组的内存_C++_Matrix_Memory - Fatal编程技术网

C++ 是否可以释放分配给多维数组的内存

C++ 是否可以释放分配给多维数组的内存,c++,matrix,memory,C++,Matrix,Memory,我基本上有一个uint64_t[8][3]但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这会更难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引 例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3]如何释放此节点?您不能释放它,它是cpp,这就是它的工作原理 如果使用delete(例如delete variableName[0][2])动态分配某些索引中的元素,则可以释放这些元素,但不能删除索引本身。这是

我基本上有一个
uint64_t[8][3]
但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这会更难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引


例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3]如何释放此节点?

您不能释放它,它是cpp,这就是它的工作原理

如果使用delete(例如delete variableName[0][2])动态分配某些索引中的元素,则可以释放这些元素,但不能删除索引本身。

这是不可能的,或者至少不是您希望的方式。如果您正试图实现一个类似二叉树的结构,那么看看这种树结构,您可以只动态地分配您需要的内容

如果您仍然需要数组,不使用旧的C样式数组,C++委员会自1998以来一直在积极更新标准,而使用数组的现代方式正在使用。如果你在一个环境中工作,你在使用旧的C-API,那么用现代C++编写你的逻辑,编译它并链接到你的C-API中的那个库。p> 也就是说,如果您担心性能或内存问题,您应该重新考虑您的思维方式,许多年轻的开发人员会陷入这种思维模式,最终编写的代码在设计上既不快速也不优雅(称为代码)。当您编写一个程序时,首先从可读和简单的设计开始,然后进行分析,找出什么是慢的,应该进行优化

如果您确实需要数组中的某些值为null,以便可以对其执行疯狂的操作(例如null检查,我非常不鼓励这样做),那么您应该将整数包装到另一个类中:

class Integer
{
public:
    explicit Integer(int value)
    {
        value_ = value;
    };
    Integer &operator=(Integer other)
    {
        value_ = other.value_;
    };

private:
    int value_;
};

class test
{
public:
    test()
    {
        Integer four(4);

        std::array<std::unique_ptr<Integer>, 2> arr = { std::make_unique<Integer>(four), nullptr};
    };
};
类整数
{
公众:
显式整数(int值)
{
价值=价值;
};
整数和运算符=(整数其他)
{
值=其他值;
};
私人:
int值;
};
课堂测试
{
公众:
测试()
{
整数四(4);
数组arr={std::make_unique(四),nullptr};
};
};
注:我上面写的只是一个技巧,所以你知道C++中一切都是可能的,但是我写的东西的复杂性,让你相信,这不是你的简单案例的好方法。< /P>
注二:代码未经测试,请不要像在生产代码中那样使用此代码。

您不能。这是一小部分不值得担心的未使用空间。而是使用
std::vector
,使用不可能的原始数组。一个数组被分配,它就被分配。您必须释放全部或全部,在这种情况下,您将自动分配。当变量超出范围时,系统会释放自动变量。您不能提前发布它们,但可以调整代码以缩小范围。如果你想少用一个数组,可以添加一个簿记变量来跟踪容量。谢谢大家。为什么每个人都发表评论而不是回答。现在我不能不删除它就结束这个问题。为什么每个人都发表评论而不是回答最有可能的原因是,写一个比“你不能。使用
向量
”更完整的答案将持续数页,涉及许多主题。这是一个最好留给书本的范围。注意:实际上,您也不能使用
向量来执行此操作
vector
就是保存你不使用的内存,并保存一堆簿记,记录它没有被使用的事实。这不是一个有用的答案。