调整二维动态数组大小的奇怪 "e+08" 值

Weird "e+08" values doing resizing of an 2D dynamic array

我正在尝试执行一个函数,在给定 2 个参数的情况下调整由动态数组组成的矩阵的大小:新的行数和新的列数。我的问题是,当我将其调整为比原始矩阵更大的矩阵时,应该为 0 的新值类似于 -4.31602e+08。如果我不设置值而只是初始化数组,不应该是 0 吗?

void Matrix::resize(int nRows, int nColumns) {
    float** aux = new float* [nRows];

    for (int i = 0; i < nRows;i++) {
        aux[i] = new float[nColumns];
    }

    for (int i = 0; i < m_nRows; i++) {
        for (int j = 0; j < m_nColumns; j++) {
            if (i < nRows && j < nColumns) {
                aux[i][j] = m_matrix[i][j];
            }
        }
    }

    for (int i = 0; i < m_nRows; ++i)
        delete[] m_matrix[i];
    delete[] m_matrix;


    m_matrix = aux;

    m_nRows = nRows;
    m_nColumns = nColumns;

}

您错误地认为浮点数初始化为 0。

尝试编译以下代码

float f;
std::cout << f;

.. 编译器至少会说“警告:'f' 未初始化使用”。但最终可能会打印 0。

现在试试

float* fp = new float;
std::cout << *fp;
delete fp;

编译器没有发出警告,但您正在打印随机内存内容... 访问未初始化的变量是未定义的行为。

编辑:智能指针会顺便帮你初始化值

auto fp = std::make_unique<float>();
std::cout << *fp << '\n';