2017-03-08 6 views
-4

Net ist eine Struktur, dierealloc(): ungültiger Zeiger in C

typedef struct net{ 
    int numele; 
    struct net **e; 
} net; 

Der folgende Code stellt sich die Fehler enthalten:

realloc(): invalid pointer

Die realloc Probleme verursacht, wenn auf sie zugegriffen wird, und gibt das oberer Fehler. Ich verstehe nicht warum. Wenn du denkst, dass es in diesem Teil des Codes kein Problem gibt, lass es mich wissen, weil der ganze Code 800 Zeilen lang ist, also denke ich nicht, dass ich es hier posten kann.

void add(net *n, net *ne) { 
    if(n->numele==0) { 
     n->e = (net **)malloc(sizeof(net *)); 
     n->e[0] = ne; 
     n->numele = 1; 
    } else { 
     n->e = (net **)realloc(n->e, (1 + n->numele)*sizeof(net *)); 
     n->e[n->numele] = ne; 
     n->numele = n->numele + 1; 
    } 
} 

Die Netze n und ne sind bereits an anderer Stelle im Code initialisiert, Sie können so davon ausgehen, dass sie nicht null sein wird.

+2

[Bitte lesen Sie diese Diskussion darüber, warum nicht der Rückgabewert von 'malloc()' und Familie in 'C' umgewandelt werden soll. (Http://stackoverflow.com/q/605845/2173917). –

+2

Sie kümmern sich um die Erstellung eines [___MCVE___] (http://stackoverflow.com/help/mcve)? –

+2

@SouravGhosh - Ich habe neulich ein nettes Feature von Kommentaren gelernt, wenn Sie das Markup '[mcve]' eingeben, wird zu [mcve] erweitert. – StoryTeller

Antwort

0

Code für realloc() scheint in Ordnung zu sein. Wenn aber net *n beim ersten Aufruf von add(), dh numele != 0 && e != NULL, nicht richtig initialisiert wird. In solchen Fällen e möglicherweise einige Junk-Werte und realloc() versucht mit ungültiger Adresse. So kann dieser Fehler passieren.