Ich versuche, ein Array zu initialisieren und dann den Speicher auf die gleiche Adresse neu zuweisen. Hier ist mein Code:Pointer Problem mit Speicherverlust C++
//**begin #include files************
#include <iostream> // provides access to cin and cout
//--end of #include files-----------
//----------------------------------
using namespace std;
//----------------------------------
//**begin global constants**********
const int arraySize = 5;
//--end of global constants---------
//----------------------------------
//**begin main program**************
int main()
{
cout << endl << endl;
int* nArray = new int[arraySize];
cout << " --->After creating and allocating memory for nArray." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << dec << endl;
for (int i = 0; i < arraySize; i++)
{
nArray[i] = i*i;
}
cout << " --->After initializing nArray." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << dec << endl << endl;
for (int i = 0; i < arraySize; i++)
{
cout << " nArray[" << i << "] = " << nArray[i] << " at address <" << nArray + i << ">" << endl;
}
// You'll need a command here to fix the memory leak
cout << endl << " --->Before reallocating memory for nArray." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << endl;
int* aux = new int[arraySize + 2];
cout << dec << " --->After reallocating memory for nArray." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << dec << endl;
for (int i = 0; i<arraySize; i++) {
aux[i] = nArray[i];
}
delete[] nArray;
nArray = aux;
cout << endl << " --->After reinitializing nArray." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << dec << endl << endl;
for (int i = 0; i < arraySize + 2; i++)
{
cout << " nArray[" << i << "] = " << nArray[i] << " at address <" << nArray + i << ">" << endl;
}
// . . . and also here.
cout << endl << " --->Getting ready to close down the program." << endl;
cout << " nArray address is <" << nArray << "> and contains the value " << hex << *nArray << dec << endl;
// Wait for user input to close program when debugging.
cin.get();
return 0;
}
//--end of main program-------------
//----------------------------------
Ich habe versucht mit delete nArray; dann wieder initialisieren, aber es funktioniert nicht. Nicht sicher, was zu tun ist, aber ich habe nach ein paar Stunden gesucht und jede Hilfe würde geschätzt werden!
Die kommentierten Zeilen zeigen, wo Anweisungen hinzugefügt werden sollten.
Dies ist das Ergebnis, das ich brauche:
const int arraySize = 5;
int main()
{
int* nArray = new int[arraySize];
for (int i = 0; i < arraySize; i++)
nArray[i] = i*i;
int* aux = new int[arraySize + 2];
for (int i = 0; i<arraySize; i++)
aux[i] = nArray[i];
delete[] nArray;
nArray = aux;
}
Wenn Sie dynamische Speicherzuweisung verwenden, steuern Sie nicht die Adresse des zugewiesenen Erinnerung. Dies steht unter der Kontrolle der Implementierung des Speicherzuordners. Warum würde es dich interessieren? Es gibt normalerweise keinen Grund und keinen Grund, dies zu tun. –
Sie haben nicht viel Kontrolle darüber, was von 'new' zurückgegeben wird. Sind das Hausaufgaben? Sind Sie sicher, dass Sie nicht nur ein paar 'delete' Anweisungen hinzufügen sollen? –
Es ist die Hausaufgabe @JohnnyMopp Es gibt auskommentierte Zeilen, aber ich kann nicht herausfinden, was ich dort tun soll – timmyspan