首页 > 解决方案 > 从矩阵中删除一行的分段错误

问题描述

我试图从矩阵中删除一行,但我只得到分段错误,我不知道我的代码有什么问题。

我的代码是:

void Matriz2D::DeleteRow(int delete_row)
{

    int new_size = total_rows-1;

    int **tmp = new int * [new_size];

    for(int i = 0; i < new_size; i++){
        tmp[i] = new int [size_cols];
    }

    for(int i = 0; i < total_rows; i++){
        if(i != delete_row){
            for(int j = 0; j < toal_cols; j++){
                tmp[i][j] = data[i][j];
            }
        }
    }

    for(int i = 0; i < total_rows; i++){
        delete [] data[i];
    }

    delete [] data;
    data = tmp;

    total_rows--;
}

标签: c++

解决方案


错误是您没有检查删除后的行的索引

void Matriz2D::DeleteRow(int delete_row)
    {

        int new_size = total_rows-1;

        int **tmp = new int * [new_size];

        for(int i = 0; i < new_size; i++){
            tmp[i] = new int [size_cols];
        }

        for(int i = 0; i < total_rows; i++){
            if(i != delete_row){
                for(int j = 0; j < toal_cols; j++){
                    if (i < delete_row) {
                       tmp[i][j] = data[i][j];
                    } else {
                       tmp[i][j] = data[i-1][j];
                    }
                }
            }
        }

        for(int i = 0; i < total_rows; i++){
            delete [] data[i];
        }

        delete [] data;
        data = tmp;

        total_rows--;
    }

推荐阅读