Google Plus

Online

Tài nguyên dạy học

Hỗ trợ trực tuyến

  • (Phạm Quang Lộc)

Thành viên trực tuyến

1 khách và 0 thành viên

Con trỏ

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(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
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
 
Gửi ý kiến

↓ 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  ↓