C++ c+中的赋值运算符+;删除内存

C++ c+中的赋值运算符+;删除内存,c++,C++,我试图在分配新内存之前先删除内存,但我不知道如何创建,并且在尝试调整矩阵大小时遇到了一个问题 Matrix & operator=(const Matrix &B){ row = B.row; col = B.col; if (matrix==0){ matrix = new int*[row]; for (int i

我试图在分配新内存之前先删除内存,但我不知道如何创建,并且在尝试调整矩阵大小时遇到了一个问题

Matrix & operator=(const Matrix &B){            
            row = B.row;
            col = B.col;

            if (matrix==0){
                matrix = new int*[row];
                for (int i = 0; i < row; ++i)
                    matrix[i] = new int[col];
            }
            for (int i = 0; i < row; i++) {
                for (int j = 0; j < col; j++) {                 
                    matrix[i][j] = B.matrix[i][j];
                }
            }   
        return *this;

    }

谢谢并致以最诚挚的问候

在每行上使用
删除[]
,然后在矩阵上使用

if (matrix!=NULL){
    for (int i = 0; i < row; ++i)
        delete[] matrix[i];
    delete[] matrix;
}
row = B.row;
col = B.col;
matrix = new int*[row];
for (int i = 0; i < row; ++i)
    matrix[i] = new int[col];
if(矩阵!=NULL){
对于(int i=0;i
请注意,这不会复制源矩阵的内容。需要另一个循环吗

for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        matrix[i][j] = B.matrix[i][j];
for(int i=0;i
问题出在哪里?一个简单的老
delete[]
难道不是显而易见的方法吗?但是请注意,您可能应该改用
std::vector
,所有内存管理问题都会迎刃而解。还要注意
&B==这种情况(自赋值)。是的,我知道类向量,但在本练习中是不允许使用vector。不知道如何解决这个问题@5gon12edery您可能还想在一两分钟后查看@user243380回顾。我忘记了一个重要部分,正在编辑答案。@user243380更新为在使用行和列删除旧矩阵后将行和列的重新分配移动到。哎呀。添加了快速循环t将数据从矩阵B复制到此。
for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        matrix[i][j] = B.matrix[i][j];