我正在尝试制作账单及其编号(标识符)。他们的号码是自动生成的,长度为9个字符。C++内存释放,在这种情况下是否需要?
这里是我的代码:
#include <iostream>
using namespace std;
int counter = 1234;
char * BillNumber()
{
if (counter == 1)
{
counter++;
return "000000001";
}
int n = 0, c = counter;
while (c != 0)
{
n++;
c /= 10;
}
char * nrBill = new char[n + 1];
_itoa_s(counter, nrBill, n + 1, 10);
nrBill[n + 1] = '\0';
int difference = 9 - n;
if (difference == 0)
return nrBill;
char * helper = new char[difference + 1];
for (int i = 0; i < difference + 1; i++)
{
helper[i] = '0';
if (i == difference)
helper[i] = '\0';
}
strcat_s(helper, 10, nrBill);
counter++;
return helper;
}
int main()
{
char * bill[10];
for (int i = 0; i < 10; i++)
{
bill[i] = BillNumber();
}
for (int i = 0; i < 10; i++)
{
cout << bill[i] << endl;
}
//Deallocation
/*for (int i = 0; i < 10; i++)
{
delete[] bill[i];
}*/
return 0;
}
当我尝试取消分配内存喜欢在评论,我得到一个错误。我明白我为什么得到它,我的意思是我甚至没有在main
函数中分配我的内存。所以我实际上需要在函数BillNumber
中释放它。但我认为这在功能上也不需要。
所以我的问题是:
是内存释放实际上需要在这里?
:我知道,我没有使用C++编码标准,所以请不要抱怨说*
你的代码充满了bug。尽管出现,这不是一项调试服务。 – juanchopanza
你为什么认为不需要内存释放?任何时候你用'new'分配内存,你必须用'delete'来释放内存。规则很简单。通过使用RAII和标准C++习惯用法,你可以使它变得更简单,但是你似乎有理由避免这些习惯。 –
@CodyGray好吧,我现在知道我需要在我的函数'BillNumber()'中释放'nrBill',但是我怎样才能释放'helper'?我的意思是我不能这样做:'delete [] helper;返回帮助程序;' – Kapobajza