Con trỏ

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Phạm Quang Lộc (trang riêng)
Ngày gửi: 00h:00' 18-09-2011
Dung lượng: 34.5 KB
Số lượt tải: 2
Nguồn:
Người gửi: Phạm Quang Lộc (trang riêng)
Ngày gửi: 00h:00' 18-09-2011
Dung lượng: 34.5 KB
Số lượt tải: 2
Số lượt thích:
0 người
Các anh chị giúp em bài tập này với. Bài tập khởi tạo và sư dụng mảng 2 chiều dạng con trỏ của con trỏ.
C++ Code:
Lựa chọn code | Ẩn/Hiện code
#include #include #include #include // Khai bao nguyen mau ham. void InitArray(int **A, int rows, int cols); void AddArray(int **A, int **B, int rows, int cols); void DisplayArray(int **A, int rows, int cols); void DeleteArray(int **A, int rows); // Ket thuc khai bao nguyen mau ham. void InitArray(int **A, int rows, int cols) { A = new int*[rows]; for (int i = 0; i < rows; i++) { A[i] = new int[cols]; for (int j = 0; j < cols; j++) { cout << "Nhap A[" << i << "][" << j << "]: "; cin >> A[i][j]; } } return; } void AddArray(int **A, int **B, int rows, int cols) { for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) A[i][j] = B[i][j]; return; } void DisplayArray(int **A, int rows, int cols) { for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) { cout << "A[" << i << "][" << j << "] = " << A[i][j] << endl; } return; } void DeleteArray(int **A, int rows) { for (int i = 0; i < rows; i++) delete [] A[i]; delete [] A; return; } // Ham main() void main() { clrscr(); int **A, **B, rows, cols; cout << "So dong : "; cin >> rows; cout << "So cot : "; cin >> cols; // Khoi tao cac ma tran cout << "Khoi tao mang A:" << endl; InitArray(A,rows,cols); cout << "Khoi tao mang B:" << endl; InitArray(B,rows,cols); // Cong hai ma tran AddArray(A,B,rows,cols); // Hien thi ket qua DisplayArray(A,rows,cols); // Giai phong bo nho DeleteArray(A,rows); DeleteArray(B,rows); return; }
Nó cứ báo lỗi là : "Thread 1 stoped: path/contro_va_mang.exe: fault: access violation at 0x4011: read of address 0x0."
#2
04-10-2010, 12:34 AM
tauit_dnmd
Close All
Ngày gia nhập: 10 2009
Nơi ở: Close All
Bài viết: 1,013
Lỗi là do hàm
PHP Code:
void InitArray(int **A, int rows, int cols) { A = new int*[rows]; for (int i = 0; i < rows; i++) { A[i] = new int[cols]; for (int j = 0; j < cols; j++) { cout << "Nhap A[" << i << "][" << j << "]: "; cin >> A[i][j]; } } return; }
Vì khi bạn gọi InitArray(A,rows,cols); để cấp phát bộ nhơ cho con trỏ A , nhưng hàm bạn chỉ truyền vào bản sao của A cho hàm thôi.Nên hàm cấp phát bộ nhớ cho bản sao đó,chứ không fai cấp cho A. Nen khi kết thúc hàm A vẫn chưa đc cấp phát bô nhớ. Mà sau đó bạn gọi hàm Cộng và Xuất ma trận thì truy xuất sẽ bị lỗi. Để khắc phục bạn sửa lại hàm InitArray(....); như sau: + cách 1 dùng tham chiếu + cách 2 dùng con trỏ cấp 3 (gọi nôm na là thế) VD: Dùng tham chiếu
PHP Code
C++ Code:
Lựa chọn code | Ẩn/Hiện code
#include
Nó cứ báo lỗi là : "Thread 1 stoped: path/contro_va_mang.exe: fault: access violation at 0x4011: read of address 0x0."
#2
04-10-2010, 12:34 AM
tauit_dnmd
Close All
Ngày gia nhập: 10 2009
Nơi ở: Close All
Bài viết: 1,013
Lỗi là do hàm
PHP Code:
void InitArray(int **A, int rows, int cols) { A = new int*[rows]; for (int i = 0; i < rows; i++) { A[i] = new int[cols]; for (int j = 0; j < cols; j++) { cout << "Nhap A[" << i << "][" << j << "]: "; cin >> A[i][j]; } } return; }
Vì khi bạn gọi InitArray(A,rows,cols); để cấp phát bộ nhơ cho con trỏ A , nhưng hàm bạn chỉ truyền vào bản sao của A cho hàm thôi.Nên hàm cấp phát bộ nhớ cho bản sao đó,chứ không fai cấp cho A. Nen khi kết thúc hàm A vẫn chưa đc cấp phát bô nhớ. Mà sau đó bạn gọi hàm Cộng và Xuất ma trận thì truy xuất sẽ bị lỗi. Để khắc phục bạn sửa lại hàm InitArray(....); như sau: + cách 1 dùng tham chiếu + cách 2 dùng con trỏ cấp 3 (gọi nôm na là thế) VD: Dùng tham chiếu
PHP Code
 
↓ CHÚ Ý: Bài giảng này được nén lại dưới dạng RAR và có thể chứa nhiều file. Hệ thống chỉ hiển thị 1 file trong số đó, đề nghị các thầy cô KIỂM TRA KỸ TRƯỚC KHI NHẬN XÉT ↓






Các ý kiến mới nhất