Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Kiểm giùm lỗi HEAP CORRUPTION DETECT trong bài mảng các struct số phức?

    Các bác xem giùm em bài code này bị lỗi chỗ nào?
    Yêu cầu của đề là:
    Mã:
    Viết chương trình thực hiện chức năng sau đây (sử dụng mảng động).
    1. Nhập vào một mảng các số phức (số phức gồm 2 thành phần thực và ảo).
    2. Xuất mảng các số phức ra màn hình.
    3. Tính tổng các số phức có trong mảng.
    4. Tìm số phức thứ hai trong mảng có phần thực là một số không âm.
    5. Thêm một số phức vào mảng (vị trí thêm do người dùng chọn, tính từ 0).
    6. Xóa các số phức có phần thực chỉ định ra khỏi mảng (người dùng sẽ nhập giá trị phần thực cần xóa).
    Em chạy được ra kết quả nhưng nó cứ báo lỗi HEAP CORRUPTION DETECT, mấy bài gần đây đụng vào cấp phát động thì nó cứ ra lỗi như vậy?
    Mã:
    #include <iostream>
    using namespace std;
    typedef struct sp{
    	float thuc;
    	float ao;
    } sophuc;
    void nhap(sophuc &f) {
    	cin >> f.thuc >> f.ao;
    }
    void nhapmang(sophuc *f,int n) {
    	for(int i=0;i<n;i++){
    		cout << "phan tu thu " << i+1 << ": ";
    		nhap(f[i]);
    	}
    }
    void xuat(sophuc f) {
    	cout << f.thuc;
    	if (f.ao>=0)
    		cout << "+";
    	cout  << f.ao << "i";
    }
    void xuatmang(sophuc *f,int n) {
    	for(int i=0;i<n;i++) {
    		xuat(f[i]);
    		cout << endl;
    	}
    }
    sophuc tongmang(sophuc *f,int n) {
    	sophuc t;
    	t.ao=0;
    	t.thuc=0;
    	for(int i=0;i<n;i++) {
    		t.ao+=f[i].ao;
    		t.thuc+=f[i].thuc;
    	}
    	return t;
    }
    void pt20am(sophuc *f,int n) {
    	sophuc t;
    	t.ao=0;
    	t.thuc=0;
    	int i,dem=0;
    	for(i=0;(i<n)&&(dem<2);i++)
    		if(f[i].thuc>=0) {
    			dem++;
    			t.ao=f[i].ao;
    			t.thuc=f[i].thuc;
    		}
    		if(dem==2) {
    			cout << "So thu 2 co phan thuc khong am: ";
    			xuat(t);
    		}
    		else
    			cout << "Khong co phan tu thu 2 co phan thuc khong am!";
    }
    void doimang(sophuc *f,int &n,int m,int o) {
    	if(o>0)
    		for (int i=n;i>=m;i--)
    			f[i+o]=f[i];
    	else
    		for (int i=m+1;i<n;i++)
    			f[i+o]=f[i];
    	n+=o;
    }
    void them(sophuc *f,int &n,sophuc t,int m) {
    	doimang(f,n,m-1,1);
    	f[m-1]=t;
    }
    void xoa(sophuc *f,int &n,int m) {
    	doimang(f,n,m,-1);
    }
    int xoadk(sophuc *f,int &n,float thuc){
    	char fg=0;
    	for(int i=0;i<n;i++)
    		if(f[i].thuc==thuc){
    			xoa(f,n,i);
    			fg=1;
    		}
    		return fg;
    }
    void main() {
    	int n;
    	cout << "nhap vao so phan tu mang: ";
    	cin >> n;
    	sophuc *f;
    	f=new sophuc[n+1];
    	cout << "nhap cac phan tu mang(phan thuc - phan ao): " << endl;
    	nhapmang(f,n);
    	cout << "Mang vua nhap la: " << endl;
    	xuatmang(f,n);
    	cout << "Tong cac so co trong mang: ";
    	xuat(tongmang(f,n));
    	cout << endl;
    	pt20am(f,n);
    	int m;
    	sophuc t;
    	cout << endl << "Nhap vi tri can them phan tu (nho hon tong so phan tu): ";
    	cin >> m;
    	if (m>n)
    		do {
    			cout << "Nhap sai, nhap lai: ";
    			cin >> m;
    		} while (m>n);
    	cout << "Nhap so phuc can them: ";
    	nhap(t);
    	them(f,n,t,m);
    	cout << "Mang sau khi them: " << endl;
    	xuatmang(f,n);
    	float thuc;
    	cout << "Mhap phan thuc ban muon xoa: ";
    	cin >> thuc;
    	if(xoadk(f,n,thuc)){
    		cout << "Mang sau khi xoa: " << endl;
    		xuatmang(f,n);
    	}
    	else
    		cout << "Khong co phan thuc nhu vay trong mang!";
    	delete []f;
    	return;
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn nên đưa thêm từ này " HEAP CORRUPTION DETECT"
    vào tiêu đề
    vì tiêu đề của bạn rất chung chung
    hic...........
    ps: mình kiểm tra thấy bt mà

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hic, lần đầu post bài trên diễn đàn nên nó như vậy [IMG]images/smilies/biggrin.png[/IMG]
    Cũng không biết tại sao nữa, chạy là nó báo lỗi như vậy, hỗi nãy đứa bạn mới chỉ cách là ở hàm them, thay vì dời mảng thì khởi tạo luôn mảng mới rồi thao tác, làm vậy thì nó lại chạy được =.=, không hiểu là tại sao nữa?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguoihocnghe
    Hic, lần đầu post bài trên diễn đàn nên nó như vậy [IMG]images/smilies/biggrin.png[/IMG]
    Cũng không biết tại sao nữa, chạy là nó báo lỗi như vậy, hỗi nãy đứa bạn mới chỉ cách là ở hàm them, thay vì dời mảng thì khởi tạo luôn mảng mới rồi thao tác, làm vậy thì nó lại chạy được =.=, không hiểu là tại sao nữa?
    mình debug thấy nó chạy
    ko để ý các cú pháp....
    ở diễn đàn nào bạn cũng nên đọc nội quy
    hiện nay các mod và member đang tranh cãi nhau vì vấn đề này
    hic.... tất cả chỉ là .... "NEWMEM KO ĐỌC NỘI QUY"

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đúng là nó vẫn chạy, nhưng mà sau khi ra kết quả rồi, cửa sổ chương trình chưa kịp đóng lại thì "HEAP CORRUPTION DETECT"
    P/s: em đã thấy bài của các bạn trong chuyên mục bị del thẳng tay nên đã cố gắng viết cái tiêu đề như vậy, không ngờ là nó vẫn còn ... chung =.='

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đã tìm ra lỗi ^^, ở hàm doimang phải là f[i]=f[i-o]; mới đúng [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •