作者bil193 (丁丁)
看板C_and_CPP
標題[問題] 不曉得哪裡有問題(C++)
時間Sat Oct 17 12:36:42 2009
小弟在寫一個用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
推 janice001:上色的挺好看的.. 10/17 12:50
→ bil193:是用置底文:[公告] 張貼程式碼 裡面的網址的啦 10/17 12:54
推 ledia:是不是應該 terms == capacity 才加倍呀 ? 10/17 12:56
→ ledia:or 至少是 terms >= capacity - 1 之類的 10/17 12:57
→ bil193:改成terms>=capacity-1 之後 還是一樣卡在原來的地方耶@@ 10/17 13:01
→ bil193:多謝提醒:) 10/17 13:02
推 janice001:噗 原來如此 XD 10/17 13:20
推 snowlike:new空間給temp,然後交給termArray,然後把該空間回收.. 10/17 13:24
推 tiyun:應該是delete[] termArray; 再termArray=temp; ? 10/17 14:26
→ bil193:謝謝各位 用樓上的方式就可以了 10/17 17:30