私は請求書とその番号(識別子)を作成しようとしています。その番号は自動的に生成され、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++コーディング標準を使用していないことを知っています*
コードにはバグがたくさんあります。これは外観にもかかわらず、デバッグサービスではありません。 – juanchopanza
なぜメモリの割り当てを解除する必要はないと思いますか? 'new'でメモリを割り当てる時はいつでも' delete'でメモリを解放しなければなりません。ルールは非常に簡単です。あなたはRAIIと標準のC++のイディオムを使って簡単にすることができますが、それらを避ける何らかの理由があるようです。 –
@CodyGrayよく、私は関数 'BillNumber()'で 'nrBill'の割り当てを解除する必要があることを知っていますが、どうすれば' helper'の割り当てを解除できますか?私は次のようなことはできません: 'delete [] helper; return helper; ' – Kapobajza