申論題內容
四、Memory leakage 所造成之錯誤在程式 debug 階段往往無法即時查覺,因此為 C++
程式設計者所需特別留意的問題之一。請說明何謂 memory leakage?其造成的錯誤
原因為何?(13 分)以下程式片斷在數個地方會造成 memory leakage,請修正其程
式內容。答案中請寫出被修正過之類別或函式(function)之完整內容,不需修正之
類別或函式無須再謄寫於答案中。(12 分)
class Fruit{
private:
double weight;
char *color;
public:
Fruit(double, char *);
virtual ~Fruit(); };
Fruit::Fruit(double w, char *col) {
weight = w;
color = new char[strlen(col)+1];
strcpy(color, col); }
Fruit::~Fruit(){
delete color; }
class Apple:public Fruit{
private:
char *variety;
public:
Apple(double, char *, char *);
~Apple(); };
Apple::Apple(double w, char *col, char *var): Fruit(w,col) {
variety = new char[strlen(var)+1];
strcpy(variety, var); }
Apple::~Apple(){
delete variety; }
main(){
Fruit *basket[20];
int i;
double weight;
char color[128], variety[128];
for(i=0; i<20; i++)
basket[i] = new Apple(weight, color, variety);
delete [] basket; }