2017-11-21 4 views
-2

Ich bin neu in C-Programmierung. Ich möchte eine verknüpfte Liste erstellen, also tat ich es, aber es funktioniert nicht. Nachdem ich das gemacht habe, habe ich es für einen Test gemacht, aber es gibt immer noch einen Fehler.Wie kann ich ein Array neu zuweisen, das in einer anderen Funktion zugewiesen wurde?

malloc: Fehler für Objekt 0xa000000000000000: pointer realloc'd wird nicht zugewiesen wurde
einen Haltepunkt in malloc_error_break zu debuggen

Wie kann ich dieses Array umverteilen?

void Allocate(int **arr,int totalNum, int subNum) 
{ 
    for(int n=0;n<(totalNum+1);n++) 
    { 
     arr[n] = (int*)realloc(arr[n],(size_t)((subNum+1)*sizeof(int))); 
    } 
} 
int main() 
{ 
    int totalNum = 20; 
    int subNum = 5; 
    int **arr; 
    arr = (int**)malloc((totalNum+1)*sizeof(int*)); 
    Allocate(arr,totalNum, subNum); 

    for(int n=1;n<(totalNum+1);n++) 
    { 
     for(int s=1;s<(subNum+1);s++) 
     { 
      arr[n][s] = rand()%5; 
      cout<<"arr["<<n<<"]["<<s<<"]: "<<arr[n][s]<<endl; 
     } 
    } 
} 
+0

Ich kann nicht beginnen, die Frage zu verstehen. Verknüpfte Listen und Arrays sind verschiedene Dinge, wenn Sie nicht wissen, –

+1

* Ich bin Newb auf C-Programmierung. * - Warum haben Sie dies als 'C++'? C++ hat 'std :: list', wenn Sie eine douby-verknüpfte Liste, eine' std :: forward_list' für eine einfach verknüpfte Liste und 'std :: vector' für dynamische Fehler wünschen. Daher muss Kodierung nicht so aussehen. – PaulMcKenzie

+0

[nicht malloc] (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Barmar

Antwort

0

Das erste Argument für realloc() entweder NULL oder einen Zeiger sein, die zuvor von malloc() oder realloc() zurückgegeben wurde. Sie haben ein Array mit nicht initialisierten Daten an Allocate() übergeben. Sie übergeben also nicht initialisierte Zeiger an realloc() dort. Sie müssen zuerst alle auf NULL initialisieren.

arr = malloc((totalNum+1)*sizeof(int*)); 
for (int i = 0; i < totalNum+1; i++) { 
    arr[i] = NULL; 
} 
Allocate(arr,totalNum, subNum); 
1

Das Programm stürzt ab, weil arr[n] nicht initialisiert ist, wenn realloc() aufgerufen wird.

ich verstehe nicht ganz, warum Sie realloc() anstelle von in der Allocate() Funktion wollen. aber wie auch immer, lassen Sie uns annehmen, ist was Sie brauchen.

Die einfachste Lösung ist arr Inhalt zu initialisieren.

arr = (int**)calloc((totalNum+1),sizeof(int*)); 
Verwandte Themen