[問題] 不曉得哪裡有問題(C++)

看板C_and_CPP作者 (丁丁)時間14年前 (2009/10/17 12:36), 編輯推噓5(505)
留言10則, 5人參與, 最新討論串1/1
小弟在寫一個用OOP實作多項式 的程式 可是就一個小地方 debug一個早上還是找不出原因 把所有變數值都印出來,還是不知道為什麼 第一次在main裡面執行 a.newTerm(2,4); 是成功的 但下一行再執行 a.newTerm(3,5); 就在termArray[terms].coef=theCoeff; 卡住了,也沒說錯誤,但從這以後 的指令都不跑了,太奇怪了! 另外一件很怪的事 如果我把termArray[terms].coef=theCoeff; 的上一行,也就是: cout<<"termArray["<<terms<<"].coef="<<termArray[terms].coef<<endl; 註解掉(這只是一個印出目前值,刪掉應該無傷大雅),執行時就好像會runtime_error ps.compiler是Dev C++ 這到底是什麼問題啊@@ #include <iostream> using namespace std; class Term{ public: friend class Poly; double coef; int exp; }; class Poly{ public: Term* termArray; int capacity; int terms; void newTerm(double theCoeff,int theExp) { cout<<"Enter function newTerm theCoeff:"<<theCoeff<<" theExp:"<<theExp<<endl; if(terms<=capacity-1) { cout<<"Enter if statement."<<endl; capacity*=2; cout<<"Now capacity:"<<capacity<<endl; Term* temp=new Term[capacity]; copy(termArray,termArray+terms,temp); termArray=temp; delete[] temp; } cout<<"termArray["<<terms<<"].coef="<<termArray[terms].coef<<endl; termArray[terms].coef=theCoeff; cout<<"termArray["<<terms<<"].coef="<<termArray[terms].coef<<endl; termArray[terms++].exp=theExp; cout<<"---Information list---"<<endl; cout<<"term:"<<terms<<endl; cout<<" capacity:"<<capacity<<endl; cout<<" ["<<terms-1<<"]"<<": " <<endl; cout<<"coef:"<<termArray[terms-1].coef<<endl; cout<<"exp:"<<termArray[terms-1].exp<<endl<<endl; } Poly():terms(0),capacity(1){} }; int main() { Poly a,b; a.newTerm(2,4); a.newTerm(3,5); a.newTerm(4,6); a.newTerm(5,7); system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.15.86

10/17 12:50, , 1F
上色的挺好看的..
10/17 12:50, 1F

10/17 12:54, , 2F
是用置底文:[公告] 張貼程式碼 裡面的網址的啦
10/17 12:54, 2F

10/17 12:56, , 3F
是不是應該 terms == capacity 才加倍呀 ?
10/17 12:56, 3F

10/17 12:57, , 4F
or 至少是 terms >= capacity - 1 之類的
10/17 12:57, 4F

10/17 13:01, , 5F
改成terms>=capacity-1 之後 還是一樣卡在原來的地方耶@@
10/17 13:01, 5F

10/17 13:02, , 6F
多謝提醒:)
10/17 13:02, 6F

10/17 13:20, , 7F
噗 原來如此 XD
10/17 13:20, 7F

10/17 13:24, , 8F
new空間給temp,然後交給termArray,然後把該空間回收..
10/17 13:24, 8F

10/17 14:26, , 9F
應該是delete[] termArray; 再termArray=temp; ?
10/17 14:26, 9F

10/17 17:30, , 10F
謝謝各位 用樓上的方式就可以了
10/17 17:30, 10F
文章代碼(AID): #1AsKdRgt (C_and_CPP)