我正在写一个2d矩阵程序。
作业要求:
Implement the following functions:
float *allocate(int rows, int cols);
void readm(float *matrix, int rows, int cols);
void writem(float *matrix, int rows, int cols);
void mulmatrix(float *matrix1, int rows1, int cols1, float *matrix2, int cols2, float *product);
我的代码(在main中删除了一些部分,只是创建和调用allocate)
int main() {
float * matrix1;
float * matrix2;
matrix1 = allocate(rows1,cols1);
matrix2 = allocate(rows2,cols2);
}
float *allocate(int rows, int cols) {
float ** matrix = new float *[rows * cols];
return *matrix;
}//end allocate
void writem(float *matrix, int rows, int cols) {
for (int x = 0; x < rows; x++) {
for (int y = 0; y < cols; y++) {
cout << "enter contents of element at " << (x + 1) << ", " << (y + 1) << " ";
cin >> matrix[x*rows + cols];
}
}
}//end writem
我收到错误
lab5.exe中0x0FECF6B6(msvcp140d.dll)抛出异常:0xC0000005:访问冲突写入位置0xCDCDCDD5。如果存在此异常的处理程序,则可以安全地继续该程序。
它发生在线cin&gt;&gt; matrix [x * rows + cols];
答案 0 :(得分:2)
首先,你错过了指数。
应该
cin >> matrix[x*rows + y];
代替
cin >> matrix[x*rows + cols];
其次,为什么要创建float *
而不仅仅是float
的矩阵?
float *allocate(int rows, int cols) {
float* matrix = new float[rows * cols];
return matrix;
}//end allocate