【发布时间】:2014-08-06 13:57:11
【问题描述】:
所以我上周开始学习C++,很自然地,我想熟悉整个指针和面向对象的业务等等。
为此,我正在为一些基本的矩阵计算编写一个非常简单的程序:
# include <iostream>
using std::cout;
using std::cin;
class Matrix {
int columns; // x
int rows; // y
double* matrix;
public:
Matrix (int*);
void printMatrix();
void free() {
delete[] matrix;
return;
};
};
Matrix::Matrix(int* dim){
rows = *dim;
columns = *(dim + 1);
matrix = new double [columns*rows];
}
void Matrix::printMatrix(){
int i, j;
for(i = 0; i < columns; i++){
for(j=0; j < rows; j++){
cout << matrix[columns*i + j] << " ";
}
cout << "\n";
}
return;
}
int* getMatrix ();
int main () {
Matrix matrix (getMatrix());
matrix.printMatrix();
matrix.free();
return 0;
}
int* getMatrix (){
int* dim = new int [2];
cout << "(m x n)-Matrix, m? ";
cin >> dim[0];
cout << "n? ";
cin >> dim[1];
return dim;
}
当我选择 (4,2) 矩阵时,会出现问题(如我所见)。据我从各种教程中了解到,
matrix = new double [columns*rows];
应该分配这么多内存:columns*rows 乘以 sizeof(double)。此外,每个“单元格”都应使用 0 进行初始化。
但是,选择一个 (4,2) 矩阵,我得到函数 printMatrix() 的以下输出:
0 0
0 0
0 6.6727e-319
0 0
为什么 (3,2) 条目没有用 0 初始化?
谢谢!
【问题讨论】:
-
@MarkB:这个问题是完全相反的......
-
@Lightness Races in Orbit 接受的答案正好回答了这个问题。
-
@MarkB:嗯,好吧。这并没有使问题相同(根本),但我会保持原样。
-
@JoBe:
GetMatrix()像筛子一样漏水,顺便说一句! -
@joBe:一旦你有时间进行代码审查。 codereview.stackexchange.com
标签: c++