如何解决奇怪的“ e + 08”值会调整2D动态数组的大小
我正在尝试执行一个函数,该函数在给定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';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。