关于内存的问题 有些晕
#include<iostream.h>
#include<ostream.h>
#include<istream.h>
//using namespace std;
typedef int **MAX;//为现有类型创建一个新的名字,或称为类型别名
class Matrix
{
int row;//行
int line;//列
MAX max;
public:
Matrix(int line, int row);//建立矩阵
Matrix();
void init();
void display();
void inputDate();
friend Matrix operator+ (Matrix &m1 , Matrix &m2);
};
void Matrix::init()
{
for(int i = 0; i < line; i++)
for(int j = 0; j < row; j++)
max[i][j] = 0;
}
Matrix::Matrix()
{
row = 10;
line = 10;
max=(int **)new int[line];
for(int i=0;i<line;i++)
{
max[i]=new int[row];
}
init();
}
Matrix::Matrix(int row, int line)
{
this->row = row;
this->line = line;
max = (int **) new int[row];
for(int i = 0; i < row; i++)
{
max[i] = new int[line];
}
init();
}
void Matrix::display()
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < line; j++)
{
cout<<max[i][j]<<" ";
}
cout<<endl;
}
}
Matrix operator+ (Matrix &m1 , Matrix &m2)
{
for(int i = 0; i < m1.line; i++)
for(int j = 0; j < m1.row; j++)
m1.max[i][j] += m2.max[i][j];
return m1;
}
void Matrix::inputDate()
{
cout<<"请输入数据:"<<endl;
for(int i = 0; i < row; i++)
{
cout<<"请输入第"<<i+1<<"行数据"<<endl;
for(int j = 0; j < line; j++)
{
cin>>max[i][j];
}
}
}
int main()
{
Matrix m(4,3);
m.inputDate();
m.display();
}
有个地方十分不理解
这样子max = (int **) new int[row];
for(int i = 0; i < row; i++)
{
max[i] = new int[line];
}
正确
但是我改为
max = (int **) new int[line];
for(int i = 0; i < line; i++)
{
max[i] = new int[row];
}
就错误 编译正确 但是我输入数据后 最后就会错误
[解决办法]
char**p = a;
就是 p=a,p[0] = malloc(5)就是 *(a+0)= malloc(5) ,所以报错
[解决办法]
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() { p=(int **)malloc(4*sizeof(int *)); if (NULL==p) return; for (i=0;i<4;i++) { p[i]=(int *)malloc(5*sizeof(int)); if (NULL==p[i]) return; } for (i=0;i<4;i++) { for (j=0;j<5;j++) { p[i][j]=i*5+j; } } for (i=0;i<4;i++) { for (j=0;j<5;j++) { printf(" %2d",p[i][j]); } printf("\n"); } for (i=0;i<4;i++) { free(p[i]); } free(p);}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19
[解决办法]
//在堆中开辟一个3×4×5的3维int数组#include <stdio.h>#include <malloc.h>int ***p;int i,j,k;void main() { p=(int ***)malloc(3*sizeof(int **)); if (NULL==p) return; for (i=0;i<3;i++) { p[i]=(int **)malloc(4*sizeof(int *)); if (NULL==p[i]) return; for (j=0;j<4;j++) { p[i][j]=(int *)malloc(5*sizeof(int)); if (NULL==p[i][j]) return; } } for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { p[i][j][k]=i*20+j*5+k; } } } for (i=0;i<3;i++) { for (j=0;j<4;j++) { for (k=0;k<5;k++) { printf(" %2d",p[i][j][k]); } printf("\n"); } printf("---------------\n"); } for (i=0;i<3;i++) { for (j=0;j<4;j++) { free(p[i][j]); } free(p[i]); } free(p);}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19//---------------// 20 21 22 23 24// 25 26 27 28 29// 30 31 32 33 34// 35 36 37 38 39//---------------// 40 41 42 43 44// 45 46 47 48 49// 50 51 52 53 54// 55 56 57 58 59//---------------