Ich versuche, Rechnungen und ihre Nummern (Kennungen) zu machen. Ihre Nummern werden automatisch generiert und sind 9 Zeichen lang.C++ Speicherfreigabe, wird es in diesem Fall benötigt?
Hier ist mein Code :
#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;
}
Wenn ich versuche, den Speicher freizugeben, wie im Kommentar, ich einen Fehler. Ich verstehe, warum ich es verstehe, ich meine, ich habe nicht einmal mein Gedächtnis in der main
Funktion zugewiesen. Also muss ich es tatsächlich in der Funktion BillNumber
freigeben. Aber ich denke nicht, dass das auch in der Funktion benötigt wird.
Also meine Frage ist:
Ist Speicherfreigabe hier tatsächlich benötigt?
: Ich weiß, dass ich nicht c bin mit ++ Codierungsstandards, also bitte nicht beschweren über die *
Ihr Code ist voller Fehler. Und das ist trotz des Auftretens kein Debugging-Service. – juanchopanza
Warum denken Sie, dass Speicherfreigabe nicht benötigt wird? Jedes Mal, wenn Sie Speicher mit 'new' belegen, müssen Sie die Zuweisung mit' delete' aufheben. Die Regel ist ziemlich einfach. Sie können es noch einfacher machen, indem Sie RAII- und Standard-C++ - Idiome verwenden, aber Sie haben anscheinend einen Grund, diese zu vermeiden. –
@CodyGray Nun, ich bin mir jetzt bewusst, dass ich die 'nrBill' in meiner Funktion' BillNumber() 'freigeben muss, aber wie kann ich' helper' entziehen? Ich meine, ich kann so etwas nicht machen: 'delete [] helper; return helfer; ' – Kapobajza