返回信息流写了一个矩阵的加法,因为想避免分配的内存不够就用了new来分配内存,但是编译后运行到一半,编译器总是提醒我对于矩阵C的“读取访问权限冲突”有没有大佬可以解释一下。感谢!
#include "stdafx.h"
#include <iostream>
using namespace std;
//加法
int mat_add(int **A, int **B,int **C,int row,int col)
{
int i = 0, j = 0;
for (i; i < row; i++)
{
for (j; j < col; j++)
{
C[i][j] = A[i][j] + B[i][j];
}
}
for (i; i < row; i++)
{
for (j; j < col; j++)
{
cout << "\t" << C[i][j];
}
cout << endl;
}
return 0;
}
int main()
{
int row, col;
cout << "请输入行数:"<<endl;
cin >> row;
cout << "请输入列数:" << endl;
cin >> col;
//为矩阵A申请空间
//定义行
int **A = new int *[row];
//定义列
for (int i = 0; i < row; i++)
{
A[i] = new int[col];
}
//为矩阵B申请空间
//定义行
int **B = new int *[row];
//定义列
for (int i = 0; i < row; i++)
{
B[i] = new int[col];
}
//为矩阵C申请空间
//定义行
int **C = new int *[row];
//定义列
for (int i = 0; i < row; i++)
{
C[i] = new int[col];
}
//输入A;
cout << "请输入矩阵A" << endl;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> A[i][j];
}
}
//输入B;
cout << "请输入矩阵B" << endl;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> B[i][j];
}
}
//调用函数!!!!!
mat_add(A, B, C,row, col);
//释放ABC空间;
for (int i=0; i < row; i++)
{
delete A[i];
A[i] = NULL;
}
delete[row]A;
A = NULL;
for (int i = 0; i < row; i++)
{
delete B[i];
B[i] = NULL;
}
delete[row]B;
B = NULL;
for (int i = 0; i < row; i++)
{
delete C[i];
C = NULL;
}
delete[row]C;
C = NULL;
system("pause");
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #96925同步于 2017/11/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】求大佬解释一下- -!!
iAzure
2017/11/26镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
line 102: C = NULL; // what the hell?!!
delete[row]C: 这种写法真没见过,可能我见识少...
A[i], B[i], C[i]也都应该用delete[]啊...
搜的度娘[ema8]看的c++primer plus只介绍了new的一维用法[ema1][ema1]
【 在 intmain 的大作中提到: 】
: line 102: C = NULL; // what the hell?!!
:
: delete[row]C: 这种写法真没见过,可能我见识少...
可以举个栗子吗~谢谢
【 在 iShu 的大作中提到: 】
: 通常分配矩阵内存的时候都是分配成一维的,使用的时候根据矩阵维数来索引,这样分配的好处是内存连续
他的意思应该是
对于
```int matrix[R][C];```
可以定义为
```int matrix[R * C];```
即
```matrix[i][j] == matrix[i * C + j]```
按照楼主的写法,就是用
```int* matrix;```
就ok了
不过为什么不用
```vector<int> matrix;```
呢?这种写法并没有用到cpp的任何优势,跟c没有区别
【 在 iAzure 的大作中提到: 】
: 可以举个栗子吗~谢谢
引用 class template STL
【 在 iAzure 的大作中提到: 】
: 之前入门先看了c的教程,对于c++优势也不太清楚……可以指点一下么
: :