[語法] run time error

看板C_and_CPP作者 (一個人)時間15年前 (2010/01/06 19:34), 編輯推噓3(306)
留言9則, 4人參與, 最新討論串1/1
我要寫一個polynomial的程式 要overloading + - * = 可是我寫完compile是對了 可是寫main測試之後 卻是run time error 我不知道問題出在哪邊..... 可以幫我看一下嗎 header #include <iostream> using namespace std; class polynomial { friend istream & operator>>(istream & cin,polynomial &); public: polynomial(int=10); polynomial operator+(polynomial & right); polynomial operator-(polynomial & right); polynomial operator*(polynomial & right); polynomial operator=(polynomial & right); bool operator==(polynomial & right); bool operator!=(polynomial & right) { return !(*this==right); } void getsize(); ~polynomial(); private: int *aptr; int size; }; 然後是 cppp #include<iostream> #include "11.17.h" using namespace std; polynomial::polynomial(int a) { size=a; aptr=new int[a]; for(int i=0;i<size;i++) aptr[i]=0; } istream & operator>>(istream & cin,polynomial &right) { for(int i=0;i<right.size;i++) cin>>right.aptr[i]; return cin; } polynomial polynomial::operator +(polynomial &right) { int b,c; if(size<right.size){b=size;c=right.size;} else{c=size;b=right.size;}; polynomial a(c); if(size<right.size) {for(int i=0;i<size;i++) a.aptr[i]=(*this).aptr[i]+right.aptr[i]; for(int j=size;j<right.size;j++) a.aptr[j]=right.aptr[j];} else {for(int i=0;i<right.size;i++) a.aptr[i]=(*this).aptr[i]+right.aptr[i]; for(int j=right.size;j<size;j++) a.aptr[j]=aptr[j];} return a; } polynomial polynomial::operator -(polynomial &right) { polynomial a; if(size<right.size) for(int i=0;i<size;i++) a.aptr[i]=(*this).aptr[i]-right.aptr[i]; else for(int i=0;i<right.size;i++) a.aptr[i]=(*this).aptr[i]-right.aptr[i]; return a; } polynomial polynomial::operator *(polynomial &right) { polynomial a(size*right.size); for(int i=0;i<size;i++) for(int j=0;j<right.size;j++) a.aptr[i]=(*this).aptr[i]*right.aptr[j]+a.aptr[i]; return a; } bool polynomial::operator ==(polynomial &right) { if (size!=right.size) return false; for(int i=0;i<size;i++) if(aptr[i]!=right.aptr[i]) return false; return true; } polynomial polynomial::operator =(polynomial &right) { if(&right !=this) { if(size !=right.size) { delete [] aptr; size=right.size; aptr=new int[size]; } for(int i=0;i<size;i++) aptr[i]=right.aptr[i]; } return *this; } polynomial::~polynomial() { delete [] aptr; } void polynomial::getsize() { cout<<size; } 謝謝..... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.45.42

01/07 03:37, , 1F
你寫了很多函式 建議你試著一個個測試 過濾原因
01/07 03:37, 1F

01/07 03:38, , 2F
請問怎麼一個一個測試@@
01/07 03:38, 2F

01/07 04:43, , 3F
要測那個operator就執行哪個啊..
01/07 04:43, 3F

01/07 04:55, , 4F
-的a沒有給大小 可能會超出範圍
01/07 04:55, 4F

01/07 04:56, , 5F
*的a size怪怪 用不到那麼多?
01/07 04:56, 5F

01/07 10:12, , 6F
問題還滿明顯的...自行管理記憶體但沒寫 copy ctor
01/07 10:12, 6F

01/07 10:14, , 7F
使得物件以 default copy ctor 建構後
01/07 10:14, 7F

01/07 10:14, , 8F
有兩份物件的 aptr 指向相同的記憶體區塊
01/07 10:14, 8F

01/07 10:14, , 9F
呼叫到 dtor 時就會 double delete
01/07 10:14, 9F
文章代碼(AID): #1BHENVFH (C_and_CPP)