我試圖寫一個簡單的程序,將數字轉換爲單詞(即它將123轉換爲一百二十三)。代碼完全編譯。代碼使用指針和遞歸,在內存管理方面,我總是發現在C++中非常棘手。任何人都可以指出,如果下面的代碼在執行時會發生內存泄漏?提前致謝。遞歸指針和內存泄漏
#include <iostream>
#include <string>
using namespace std;
char *convert_number(int, int);
const char *tens[]={"","ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
const char *words[]={"zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen", "eighteen","ninteen"};
const char *place[]={"","thouands","million","billion","trillion"};
int main(int argc, char **argv)
{
int number,conv_num,places;
places=1;
char *string= new char[1000];
char *temp_string = new char[100];
cout<<"Enter a number:";
cin>>number;
string = convert_number(number,0);
cout<<"The word is :"<<string<<endl;
}
char *convert_number(int number,int places)
{
int divisor;
char *word;
int conv_num;
char *temp_string = new char[100];
word = new char[100];
divisor=10;
if (number>=1000)
{
conv_num = number % 1000;
number = (number-conv_num)/1000;
places++;
temp_string = convert_number(number,places);
word = strcat(word, temp_string);
word = strcat(word, place[places]);
word =strcat(word," ");
}
else
{
conv_num = number;
}
if (conv_num>=100)
{
word =strcat(word,words[conv_num/100]);
word =strcat(word," hundred ");
conv_num=conv_num%100;
}
if(conv_num >=20)
{
word=strcat(word,tens[conv_num/10]);
word =strcat(word," ");
if(conv_num%divisor>=1)
{
word=strcat(word,words[conv_num%divisor]);
word =strcat(word," ");
}
}
if(conv_num<20)
{
word=strcat(word,words[conv_num]);
word =strcat(word," ");
}
delete[] temp_string;
return word;
}
這看起來像一個家庭作業問題。如果是這樣,你應該用作業標籤標記它。另外,有沒有什麼理由爲你'#include'然後用'char *'作爲你的字符串?最後,'const char * place []'可能不會達到你期望的效果。 –
OmnipotentEntity
@OmnipotentEntity謝謝。這不是一個家庭作業問題,我只是試圖學習使用遞歸已知問題的內存管理。 –