30/09/2018, 19:18
Hỏi lỗi cấp phát bộ nhớ động cho mảng 2 chiều
đề bài: Nhập hai ma trận, hiển thị ma trận tổng, sử dụng cấp phát bộ nhớ động cho mảng hai chiều?
e thử chạy chương trình, nhập ma trân bình thường nhưng đến phần hiện ma trận bị lỗi
e sử dụng code:block
mong mn giúp đỡ
#include <iostream>
using namespace std;
void nmt( int **a, int h, int d); // hàm nhập ma trận
void cmt( int **a, int **b,int **c, int h, int d); //hàm cộng ma trận
void hmt (int **a, int h, int d); // hàm in ma trận
void xmt(int **a,int h); //hàm xóa ma trận
int main()
{
int h, d;
int **a, **b, **c; //các ma trận a,b,c
cout<<"Nhap so hang cua ma tran: ";
cin>>h; //số hàng
cout<<"
Nhap so cot cua ma tran: ";
cin>>d; //số cột
cout<<"Nhap ma tran A: "<<endl;
nmt(a,h,d);
cout<<"Nhap ma tran B: "<<endl;
nmt(b,h,d);
cmt(a,b,c,h,d); //tinh tong hai ma tran
cout<<"Ma tran tong la: "<<endl;
hmt(c,h,d);
xmt(a,h);
xmt(b,h);
xmt(c,h);
return 0;
}
void nmt(int **a, int h, int d)
{
a= new int*[d];
for(int i=0;i<h;i++)
{
a[i] = new int[h];
for(int j=0;j<d;j++)
{
cout<<"
Nhap phan tu hang "<<i+1<<"cot "<<j+1 <<" : ";
cin>> a[i][j];
}
}
return;
}
void hmt(int **a, int h, int d)
{
for(int i=0;i<h;i++)
for(int j=0;j<d;j++)
{
cout<<" "<< a[i][j] <<" ";
cout<<endl;
}
return;
}
void cmt(int **a, int **b, int **c, int h, int d)
{
for(int i=0;i<h;i++)
for(int j=0;j<d;j++)
c[i][j] = ( a[i][j]+b[i][j]);
}
void xmt(int **a, int h)
{
for(int i=0;i<h;i++) delete [] a[i];
delete [] a;
return;
}
Bài liên quan
Mình ghi lỗi trên phần reply, bạn xem thử có đúng không.
cám ơn bạn, munhf sửa lại nhưng vẫn chưa chạy đc
}
Đâu phải chuyển h thành d rồi d thành h đâu
cấp phát d con trỏ thì lặp d lần để cấp phát tiếp cho d con trỏ tiếp chứ
đại khái là như thế
à, ý mình là h là hàng, còn d là cột, nên mihf muốn h trước d, nghĩa là haanfd trước cột
còn bạn sửa là cột trc hàng, mình nghĩ chắc cũng tương tự