2016-04-24 6 views
-2

Ich habe hier stundenlang gesessen und versucht, das herauszufinden. Ich konnte kein ähnliches Problem finden (obwohl ich sicher bin, dass es gemacht wurde). Also weiter zu meiner Frage. Wenn ich das kompiliere, ist es in Ordnung.
Ich sollte hinzufügen, dass unsortedList Book * ist, die eine Struktur ist.Ausnahmefehler während der Laufzeit beim Schreiben in das Objekt

string tit = tempBook->title; 
string act = tempBook->action; 
string aut = tempBook->author; 
string sub = tempBook->subject; 
char* tm = tempBook->time; 

unsortedList[unsortedArrayLength].title; 
unsortedList[unsortedArrayLength].action; 
unsortedList[unsortedArrayLength].author; 
unsortedList[unsortedArrayLength].subject; 
unsortedList[unsortedArrayLength].time; 

Allerdings, wenn ich dies zu kompilieren, erhalte ich eine Fehlermeldung:
Ausnahme bei 0x5AC6516F geworfen (vcruntime140d.dll) in Assign.exe: 0xC0000005: Zugriffsverletzung Schreibort 0x00000000.

string tit = tempBook->title; 
string act = tempBook->action; 
string aut = tempBook->author; 
string sub = tempBook->subject; 
char* tm = tempBook->time; 

unsortedList[unsortedArrayLength].title = tit; 
unsortedList[unsortedArrayLength].action = act; 
unsortedList[unsortedArrayLength].author = aut; 
unsortedList[unsortedArrayLength].subject = sub; 
unsortedList[unsortedArrayLength].time = tm; 

Und dann erscheint es an dieser Stelle Fenster memcpy.asm mit dem Cursor nach oben:

CopyUpByteLoop: 
    mov  al, byte ptr [esi] 
    mov  byte ptr [edi], al 
    inc  esi 
    inc  edi 
    dec  ecx 
    jne  CopyUpByteLoop 

Die Definition von struct Buch wie gewünscht:

struct Book 
{ 
    std::string title; 
    std::string author; 
    std::string subject; 
    char* time; 
    std::string action; 
}; 

Dies ist die komplette Funktion :

void DB::insertBook(Book* tempBook) 
{ 
    using namespace std; 
    unsortedArrayLength++; 
    string tit = tempBook->title; 
    string act = tempBook->action; 
    string aut = tempBook->author; 
    string sub = tempBook->subject; 
    char* tm = tempBook->time; 

    unsortedList[unsortedArrayLength].title = tit; 
    unsortedList[unsortedArrayLength].action = act; 
    unsortedList[unsortedArrayLength].author = aut; 
    unsortedList[unsortedArrayLength].subject = sub; 
    unsortedList[unsortedArrayLength].time = tm; 

    system("cls"); 

    cout << "You have " << unsortedList[unsortedArrayLength].action <<":\n" << endl << 
    unsortedList[unsortedArrayLength].title << endl << 
    unsortedList[unsortedArrayLength].author << endl << 
    unsortedList[unsortedArrayLength].subject << endl << 
    "on " << unsortedList[unsortedArrayLength].time << endl << endl; 

    printToLog(tempBook); 
} 

Bitte hilf Obi-Wan. Du bist meine einzige Hoffnung ...

+0

Ist Ihre Variable 'unsortedArrayLength' eine Konstante? Wenn nicht, könnten Sie Probleme mit dem Array richtig initialisiert werden. Eigentlich auch, ich bin mir nicht sicher Deshalb würden Sie die Variable array length als Index verwenden, wodurch Sie einen Index nach dem Ende des Arrays zurückgeben würden, was ein klassischer "off by one" -Fehler ist. Möglicherweise müssen Sie weitere Informationen über die von Ihnen entworfene Art veröffentlichen Ihr Array und die Art, wie Sie es indizieren – ciphermagi

+0

Ich wollte nur bearbeiten, dass unsortedList vom Typ Book * ist. Mein Index == 1. Es gibt 1 Objekt im Index von einer vorherigen Operation in einer anderen Funktion. – yorTsenoJ

+0

Bitte einbeziehen Die Definition von struct Book. – ciphermagi

Antwort

0

Okay, ich habe es herausgefunden. Ich habe die Instanziierung des Arrays größer gemacht. Es schien, dass ich die oberen Grenzen des Arrays erreichte. Das Array wurde mit 2 initialisiert, was ich zwar tun würde, aber das war es nicht. :(Danke an alle geliehen mir ihr Wissen.

+0

Anstatt zufällig eine geeignete Array-Größe zu erraten, warum treten Sie nicht dem 21. Jahrhundert bei und verwenden einen 'std :: vector', der tatsächlich nach Bedarf wächst? –

+0

Wir haben im Unterricht noch keine Vektoren erreicht. Wir machen gerade sortierte Listen. Mein Professor hat tatsächlich erwähnt, dass Sie, wenn Sie ein Array füllen, programmgesteuert ein anderes erstellen können, aber er hat nicht ausgeführt, wie Sie das tun sollen. Mit dem Fälligkeitsdatum der Aufgabe näherte ich mich nicht. :/ – yorTsenoJ

+0

Es scheint komisch, dir zuerst den falschen Weg beizubringen, aber okay. –

Verwandte Themen