Recursion with pointer and memory leak
I have tried to write a simple program that converts numbers to words (i.e it converts 123 to one hundred twenty three). The code compiles completely. The code uses pointer and recursion, which I always find tricky, in terms of memory management, in c++. I am using a point to character (word) in function (convert_number) and returning the same value from that function, but I am not sure how to free the memory that it is using after the function returns the value. Following is the code,
It's much app reciated if anyone can point out other memory leaks in the program.
Code:
#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;
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;
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," ");
}
return word;
}