2017-10-22 3 views
0

Ich versuche, den Inhalt eines Arrays zu einem anderen Array mit der Einschränkung der Verwendung der Funktion memcpy() zu duplizieren.Muss ich nach der Verwendung von memcpy() den Speicher löschen?

Hier ist mein Versuch es:

int source_array[3] = {1,2,3}; 
int destination_array[3]; 
memcpy(destination_array, source_array, sizeof(source_array) * 3); 

Frage ist, brauche ich ein delete [] auf dem duplizierten Array zu verfolgen, wenn Sie das Programm schließen Speicherverluste zu vermeiden?

+0

'memcpy()' selbst macht keine Speicherzuweisungen. – user0042

+3

Sie "löschen", was Sie "neu", und "löschen []", was Sie 'neu []'. Du machst weder 'new' noch' new [] '. –

+0

Quell- und Zielarrays sind auf dem Stapel zugeordnet und werden automatisch freigegeben, wenn sie den Gültigkeitsbereich verlassen. – VTT

Antwort

1

Nein!

Sie müssen nicht delete irgendetwas, weil Sie nichts mit new zuweisen.


Betrachten Sie die folgenden Schnipsel:

int x[10]; 

void method() { 
    int y[10]; 
    int *z = new int[10]; 
    delete z; 
} 

die erste Erklärung, int x [10], statische Speicherdauer verwendet, durch cppreference definiert als: "Der Speicher für das Objekt zugewiesen wird, wenn die Programm beginnt und rückgängig gemacht, wenn das Programm beendet. Nur eine Instanz des Objekts existiert. Alle Objekte im Namespace-Bereich deklariert (einschließlich globalen Namespace) haben diese Speicherdauer, zuzüglich der mit statischen oder externen deklariert.

Die zweite, int y [10], Dauer verwendet automatische Speicherung, durch cppreference definiert als:. "das Objekt am Anfang des einschließenden Codeblock zugeordnet wird und freigegeben am Ende Alle lokalen Objekte haben diese Speicherdauer, mit Ausnahme derer, die als statisch, extern oder thread_local deklariert sind. "

Die dritte, int * z = new int [10], wird normalerweise als dynamische Speicherzuweisung bezeichnet. Dynamische Speicherzuordnungen sollten explizit freigegeben werden.

Verwandte Themen