Dynamische Arrays an Funktionen übergeben
Den ich erstellt habe 2 dynamische arrays in der main-Funktion. Ich habe bestanden beide auf die Funktion von Referenz. Dann kopiere ich Daten aus kleineren dynamischen array auf die größeren dynamischen array. Ich lösche den kleineren dynamischen array. Weisen Sie die Adresse der größeren dynamischen array zu den kleineren, dynamischen Arrays. Jetzt im Idealfall die arr-array sollte die Größe 10. Jedoch, wenn ich versuche zu drucken, das 6. element des Arrays in der main, es stürzt ab. Bitte haben Sie einen Blick auf den folgenden code:
#include <iostream>
#include <string>
using namespace std;
void func(string * arr, string * brr);
int main()
{
string* arr = new string[5];
arr[0] = "hello0";
arr[1] = "hello1";
arr[2] = "hello2";
arr[3] = "hello3";
arr[4] = "hello4";
string* brr = new string[10];
func(arr, brr);
for(int i = 0; i < 6; i++)
cout << arr[i] << endl;
return 0;
}
void func(string * arr, string * brr)
{
for(int i = 0; i < 5; i++)
brr[i] = arr[i];
for(i = 0; i < 5; i++)
cout << brr[i] << endl;
delete []arr;
arr = brr;
arr[5] = "hello5";
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Linie hat absolut keine Wirkung für die Anrufer:
Also nach dem Aufruf,
arr
Punkte, wo genau es verwendet, um Punkt-vor - zu einem jetzt ungültigen Speicherbereich (weil Sie es gelöscht haben).Wäre dies eine C-Frage, würde ich Ihnen raten, zu verwenden, die einen Zeiger auf einen Zeiger (
string **arr
). Allerdings finde ich, dass das böse in einem C++ - Programm. Vielleicht möchten Sie verwenden einen Verweis irgendwo ?Setzen diese Signatur für die Funktion
@cnicutar richtig diagnostiziert das problem; Sie werden entweder übergeben zu müssen, arr durch Referenz (Bezugnahme auf die ZEIGER, nicht das array), der Fonds der neue Wert wird zurückgegeben von arr, die der Anrufer zuordnen kann.