C++ 存储在堆上保存在堆栈上

标签 c++ heap-memory stack-memory

我有一个动态分配二维数组的代码,将其用于某些计算,然后将其放入堆栈上名为 result 的变量并释放二维数组。我想知道为什么这会起作用,以这种方式而不是拥有一个可以稍后释放的全局二维数组是一种很好的编程习惯吗?

{

        int *matrix = new int[5];

        for(row = 0; row<array_size+1;row++)
        {
            subSolution[row] = new (nothrow) int[request+1];
            if(subSolution[row] == NULL)
               return -1;
        }
        //do some stuff

        result = subSolution[1][request];

        for(row = 0; row<array_size+1; row++ )
            delete [] subSolution[row];

        delete [] subSolution;

        return result;

}

谢谢

最佳答案

没有魔法 )) 您制作了数组中一个元素的拷贝。现在您可以修改数组甚至删除它...您的拷贝 将是永久性的。但是如果你将一个指针保存到数组的一个元素,然后删除一个数组,你就会遇到麻烦:

int * pElement = & matrix[ i ][ j ];
deleteMatrix();
int x = *pElement; // bad

关于C++ 存储在堆上保存在堆栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16411781/

相关文章:

android - Android 上的 C++11 std::chrono::steady_clock 问题

c++ - 通过删除堆分配的变量来解决堆溢出错误?

java - 次要垃圾回收后 JVM 元空间被填满

c++ - GCC 和 Clang 在与 __builtin_constant_p 相关的 static_assert 方面有所不同

c++ - 可变大小位集

Java内存堆错误

c++ - 如何确定某些东西在分层结构的内存中的存储位置

访问堆对象与堆栈对象的 C++ 性能

x86 - 我可以从堆栈中弹出一个值,但将它放在 NASM Assembly 的任何地方吗?

c++ - 将类代码分离为头文件和 cpp 文件