Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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++_Dynamic Memory Allocation - Fatal编程技术网

C++ 如何将连续分配的矩阵转换为行分配的矩阵?

C++ 如何将连续分配的矩阵转换为行分配的矩阵?,c++,dynamic-memory-allocation,C++,Dynamic Memory Allocation,出于各种原因,我必须将一个矩阵作为缓冲区传递给一个函数,但在此之后,我想将分配为一个连续内存块的矩阵转换为一个为每行进行单独分配的矩阵。 这是我目前正在使用的函数 T** makeRowAllocations(T** matrix, unsigned height, unsigned width) { T** a = new T*[height]; for (size_t i = 0; i < height; ++i) { a[i] = new T[widt

出于各种原因,我必须将一个矩阵作为缓冲区传递给一个函数,但在此之后,我想将分配为一个连续内存块的矩阵转换为一个为每行进行单独分配的矩阵。 这是我目前正在使用的函数

T** makeRowAllocations(T** matrix, unsigned height, unsigned width) {
    T** a = new T*[height];
    for (size_t i = 0; i < height; ++i) {
        a[i] = new T[width];
        for (size_t j = 0; j < width; ++j)
        {
            a[i][j] = matrix[i][j];
        }
    }
    delete[] matrix[0];
    delete[] matrix;
    return a;
}
T**makeRowAllocations(T**矩阵,无符号高度,无符号宽度){
T**a=新T*[高度];
用于(尺寸i=0;i<高度;++i){
a[i]=新的T[width];
用于(尺寸j=0;j

我想知道是否有一种更节省内存的方法来做事情(不需要在内存中同时保留两个矩阵)。有没有办法从第一个矩阵中逐步释放内存?

听起来像是一个XY问题,你想实现什么?没有,如果内存被分配为单个块,就没有办法“逐步释放内存”。同意@ProXicT,你想解决的真正问题是什么?如果您需要一种类型的矩阵(锯齿矩阵),那么为什么要首先创建连续分配的矩阵呢?如果你想要一个参差不齐的矩阵,为什么不使用一个向量向量呢?我需要它作为一个邻接块在开头,以便从文件中提取数据。我有非常大的矩阵,把它们作为连续的内存块是不可行的。我很可能不会一直在堆上有这么大的内存块来存储它们。这不是一个非常有用的假设。更好的方法是假设一切正常,使用
std::vector
或更好的
std::array
。不要过早地进行优化