调整二维动态数组大小的奇怪 "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';
我正在尝试执行一个函数,在给定 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';