Giải thích cho e về bài tập cấp phát bộ nhớ động cho mảng 2 chiều với ạ
đề bài: Viết chương trình nhập vào 1 số n. Khởi tạo và nhập vào một mảng 2 chiều gồm n hàng và n cột. Tính tổng tất cả các số có trên đường chéo chính.
Yêu cầu sử dụng 2 hàm sau:
Prototype: void nhap(int **a, int n)//nhập mảng 2 chiều [nxn] do con trỏ a trỏ tới
int tong_cheo (int **a, int n)// trả về tổng các phần tử trên đường chéo chính
Lúc nhập giá trị các phân tử xong rồi thì nó bị lỗi ở dòng này ạ: s += ((a+i)+j);
và báo lỗi : Exception thrown at 0x013C618C in Project16.exe: 0xC0000005: Access violation reading location 0x00000000.
e tìm hiểu mãi không biết, nên mới đăng lên hỏi các ac, e cảm ơn ạ.
using namespace std;
void nhap(int **a, int n)
{
a = new int *[n];
for (int i = 0; i < n; i++) {
a[i] = new int [n];
for (int j = 0; j < n; j++)
{
cout << "A[" << i << "]" << "[" << j << "]= ";
cin >> *(*(a+i)+j);
}
}
}
int tong_cheo(int **a, int n)
{
int s = 0;
int j = 0;
for (int i = 0; i < n; i++)
{
s += *(*(a+i)+j);
}
return s;
}
int main()
{
int **a=0;
int n;
cout << "Nhap gia tri cua n:"; cin >> n;
nhap(a, n);
cout << "Tong cac phan tu tren duong cheo chinh= " << tong_cheo(a,n);
cout << endl;
system("pause");
return 0;
for (int i = 0; i < n; i++)
delete [] * (a + i);
delete[] a;
}
Đường chéo thì tăng i là đc rồi không cần j nữa đâu.
Bạn xuất mảng sau khi nhập xem có ra kết quả không?
Thôi, viết bt đi cho nó dễ đọc mà sai ngay chỗ hàm nhập rồi. Xem lại tham trị và tham biến (qua tham chiếu).
thêm 1 dấu
&
là xongxóa luôn cái
return 0;
nữađoạn đó e thiếu
j++;
ở trong.e bỏ j thì nó ra tổng các phần tử ở dòng đầu chứ k ra tổng đường chéo ạ
e cám ơn a ạ, e ra rồi.
a giải thích cho e 1 chút tại sao thêm dấu & được k ạ,
a giải thích cho e tí được k ạ?
Với void nhập dữ liệu vào 1 mảng a, bạn cần phải nạp 1 tham biến, vì việc nhập làm thay đổi nội dung của mảng. Mà tất nhiên là bạn muốn nhập dữ liệu cho mảng a đúng không? Thêm
&
để hàm biết rằng cần thay đổi nội dung của 1 mảng a đã có sẵn.Tham chiếu là một… đối tượng (first-class object) và có thể khai báo đại loại như:
T &rf = tf;
với đặc điểm buộc phải khởi tạo bằng đối tượng kiểu T và nó sẽ thay mặt cho đối tượng này (binding). Chính vì tính đại diện này mà thực hiện được việc truyền tham biến.E cám ơn nhiều ạ