我正在嘗試製作賬單及其編號(標識符)。他們的號碼是自動生成的,長度爲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