Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: lỗi thực thi khi giải phóng vùng nhớ của con trỏ đối tượng?

  1. #1
    Ngày gia nhập
    09 2012
    Nơi ở
    Xã Tam Dân,Huyện Phú Ninh,Tĩnh Quảng Nam
    Bài viết
    8

    Unhappy lỗi thực thi khi giải phóng vùng nhớ của con trỏ đối tượng?

    Mong các bác giúp đỡ!
    khi chạy đến dòng ''delete[] a '' nó văng ra và báo lỗi:
    ----------------------------------
    Windows has triggered a breakpoint in phansotoantu.exe.

    This may be due to a corruption of the heap, which indicates a bug in phansotoantu.exe or any of the DLLs it has loaded.

    This may also be due to the user pressing F12 while phansotoantu.exe has focus.
    -----------------------------------

    The output window may have more diagnostic information.
    em làm bài này đây .sao em cấp pháp mà đến lúc giải phóng bị lỗi là sao nhỉ!!
    khi xóa ''delete[] a'' thì chương trình chạy bình thườnghic

    không hiễu tại sao!!

    Code:
    #include"stdio.h"
    #include"iostream"
    #include"math.h"
    #include"conio.h"
    using namespace std;
    class phanso	
    {
    protected:
    	 int ms,ts;
    public:
    	
    	phanso(int i=1,int j=1)
    	{
    		ts=i;ms=j;
    	}
    	void xuat()
    	{
    		cout <<" "<<ts<<"/"<<ms<<endl;
    	}
    	void nhap();
    	  phanso &operator+(phanso &y);
    	friend istream &operator>>(istream &is,phanso &a)
    	{
    		is>>a.ts>>a.ms;
    		return is;
    	}
    	friend bool operator >(const phanso &y,const phanso &x)
    	{
    		//bool c;
    		float a=(float)x.ts/x.ms;
    		float b=(float)y.ts/y.ms;
    		if(b>a) 
    			return 1 ;
    		else return 0;
    	}
    	void rutgon();
    };
    
    class honso :public phanso 
    {
    private:
    	int song;
    	phanso x;
    public:
    	honso();
    	honso(int j,int i,int ng);
    	void nhaphonso();
    	friend	void conghaihonso(honso &a ,honso &c);
    	void xuathonso();
    
    };
    
    honso::honso()
    {
    	song=1;
    }
    
    honso::honso(int j,int i,int ng):x(j,i)
    {
    	song=ng;
    }
    
    void honso::nhaphonso()
    {
    	cout<<"\n Nhap so ng , tuso, mauso : ";
    	cin>>song;
    	x.nhap();
    }
    
    void conghaihonso(honso &a ,honso &c)
    {
    	c.song=c.song+a.song;
    	c.x=c.x+a.x;
    	c.xuathonso();
    }
    void honso::xuathonso()
    {
    	cout<<"\nhon so can xuat la: "<<song <<" ";
    	x.xuat();
    }
    int UCLN(int a,int b)
    {
    	if(a==b)
    		return a;
    	else
    	{
    		if(a>b)
    			return a=a-b;
    		else return b=b-a;
    	}
    	return 0;
    }
    void phanso::rutgon()
    {
    	int x=UCLN(ts,ms);
    		ts=ts/x;
    		ms=ms/x;
    }
    
    void phanso::nhap()
    {
    	cin >>ts>>ms;
    }
     phanso& phanso::operator+(phanso &y)
    {
    	this->ts=ts*y.ms+y.ts*ms;
    	this->ms=ms*y.ms;
    	return *this;
    }
    int main()
    {
    	phanso b,*a;
    	honso c,d;
    	
    	a = new phanso[2];
    	for(int i =1;i<=2;++i)
    	{
    		cout <<"\n nhap phan so gom tu va mau : ";
    		cin >>a[i];
    	}
    	for(int j=1;j<=2;++j)
    	{
    		a[j].xuat();
    	}
    	b=a[1];
    	for(int j=2;j<=2;++j)
    	{
    	     b=b+a[j];
    	}
    	b.xuat();
    	a[1].rutgon();
    	a[2].rutgon();
    	for(int j=1;j<=2;++j)
    	{
    		cout<<"\n kq la: ";
    		a[j].xuat();
    	}
    	if(a[1]>a[2])cout<<"\n dung  ";
    	else cout<<"\n sai roi ";
    
    	
    	cout<<"\n---------------------------------";
    	c.nhaphonso();
    	d.nhaphonso();
    	c.xuathonso();
    	d.xuathonso();
    	conghaihonso(d,c);
    	
    	delete[] a;
    	
    	system("pause");
    }
    thanks!!
    Đã được chỉnh sửa lần cuối bởi xuanvinhtd : 30-11-2012 lúc 09:48 AM.

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Phần tử đầu tiên sau khi cấp phát động có chỉ số là 0, phần tử cuối cùng là size - 1. Trong câu lệnh cấp phát trên của bạn
    C++ Code:
    1.     phanso *a = new phanso[2];
    Thì phần tử đầu tiên là a[0], cuối cùng là a[1], trong vòng for bạn cho lặp từ 1 -> 2 là truy cập ngoài phạm vi - "out of range". Chỉ cần sửa code lại là được.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  3. #3
    Ngày gia nhập
    09 2012
    Nơi ở
    Xã Tam Dân,Huyện Phú Ninh,Tĩnh Quảng Nam
    Bài viết
    8

    Cảm ơn bạn doicanhden nhiều nha!!

Các đề tài tương tự

  1. Trả lời: 1
    Bài viết cuối: 09-03-2014, 08:09 PM
  2. Lập trình C++ [Thắc mắc] Khi giải phóng thì vùng nhớ có trả về cho hdh k ?????
    Gửi bởi dehin trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 31-08-2012, 11:39 PM
  3. Chung Cư 257 Giải Phóng, st/cn Chung Cư 257 Giải Phóng với DT: 81m, 33tr
    Gửi bởi datphat191 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-02-2012, 01:37 PM
  4. Bài tập C++ Cấp phát, giải phóng vùng nhớ trong C++. Sau khi delete []p thì gán p=NULL có tác dụng gì?
    Gửi bởi bachhaiduong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 08-09-2011, 09:06 PM
  5. Lỗi khi giải phóng vùng nhớ sau khi cấp phát động
    Gửi bởi khoadangnguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 01-08-2008, 09:55 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn