2016-03-28 9 views
0

Ich lerne über Linked Lists und wollte eine Strukturdarstellung eines Polynoms machen. Das Erstellen, Einfügen und Löschen der Knoten funktioniert gut, aber wenn ich versuche, Werte von einem Polynom in ein resultierendes zu kopieren, wird der Fehler Unhandled exception ... Access reading violation ausgegeben. Warum verursacht diese Funktion dies?Unbehandelte Ausnahme beim Zuweisen neuer Werte?

struct Fraction { 
    int num; 
    int denom; 
}; 

struct PolyTerm { 
    int exp; 
    struct Fraction* coe; 
}; 

struct PolyList { 
    struct PolyTerm* polyTerm; 
    struct PolyList* next; 
}; 

typedef struct Fraction Fraction; 
typedef struct PolyTerm PolyTerm; 
typedef struct PolyList PolyList; 

PolyList* test(PolyList* list1, PolyList* list2) { 
    PolyList* result = (PolyList*)malloc(sizeof(PolyList)); 

    result->polyTerm->exp = (list2)->polyTerm->coe; 
    result->polyTerm->coe = (list1)->polyTerm->coe; 

    return result; 
} 

Ich habe den Code über den Debugger ausgeführt und das ist die Zeile, die das Programm bricht.

result->polyTerm->exp = (list2)->polyTerm->coe; 

Hier ist mein Stack-Trace

Unhandled exception at 0x00DC290A in PolyFun.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD. 
+0

Zeigen Sie uns die Definition Ihrer 'struct'. –

+0

Ich denke, dass Sie einige Einblicke in [magic number debug values] (https://en.wikipedia.org/wiki/Magic_number_ (Programmierung) #Magic_debug_values) eher erzählen können. – WhozCraig

Antwort

3

Wenn Sie den Speicher für die PolyList Struktur zuzuordnen, weist er nur Speicher für diese Struktur. Die Mitglieder dieser Struktur werden nicht initialisiert, und Zeiger verweisen nicht auf gültigen Speicher. Wenn Sie also die Dereferenzierung von result->polyTerm ausführen, verweisen Sie auf einen nicht initialisierten Zeiger (dessen Wert undefiniert undefined Verhalten ist) und einen wahrscheinlichen Absturz.

Sie müssen die Struktur initialisieren, einschließlich der Zeiger darin zeigen auf gültigen Speicher.

+0

Vielen Dank für Ihre Hilfe, ich habe es behoben, indem ich 'result' korrekt initialisiert habe. – Dumbfoundead

Verwandte Themen