簡體   English   中英

指針和內存泄漏的遞歸

[英]Recursion with pointer and memory leak

我試圖寫一個簡單的程序,將數字轉換為單詞(即它將123轉換為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;
}

“任何人都可以指出,如果下面的代碼在執行時會有內存泄漏嗎?”

是的,它可以。

char *temp_string = new char[100];  // first assignment

[...]

if (number>=1000)
{   
[...]
    temp_string = convert_number(number,places); 

當您以這種方式重新分配temp_string時,第一次分配的內存將變得不可訪問,並且尚未釋放。 你應該先delete[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM