C realloc - invalid old size |
16.02.2017, 20:59 | Auf diesen Beitrag antworten » | ||||||||||||
InformaTiger | C realloc - invalid old size Hallo, ich arbeite gerade an einer Anwendung in welcher ich enorm große Zahlen addieren muss. Habe mir hierfür eine kleine Bibliothek geschrieben, die aber leider einen Fehler enthält:
Mein Quelltext hierfür sieht folgendermaßen aus:
Der Fehler bezieht sich auf Zeile 45 in numbers.c. Das einzige, dass mir bisher aufgefallen ist ist, dass der Number Pointer n in der Hauptfunktion immer derselbe ist obwohl ich ihn wieder freigebe; auch der Pointer data vom struct Number scheint konstant zu sein bzw immer wieder dieselbe Adresse zu erhalten. Hat jemand vielleicht eine Idee, woran das liegen könnte? Mit freundlichen Grüßen InformaTiger |
||||||||||||
|
|||||||||||||
17.02.2017, 09:37 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Gibt es einen Grund, dass du das neu schreibst und keine Bibliothek verwendest (z.B. boost)? Dein Code ist unvollständig. Ihn ausführen zu können, hilft bei der Fehlersuche, ist so aber nicht möglich. Ich weiß nicht, ob das mit deinem Absturz zu tun hat, ist aber definitiv falsch:
strlen liefert die Länge ohne terminierende 0. strcpy will die '\0' mit kopieren, du hast aber nicht so viel Speicher reserviert. Wenn ich den Code ausführe stürzt bei mir zwar nichts ab, aber verlassen würde ich mich darauf nicht. In Zeile 46 machst du einen ähnlichen Fehler. Ich denke, dort ist der Absturz (du schreibst 45). |
||||||||||||
17.02.2017, 11:26 | Auf diesen Beitrag antworten » | ||||||||||||
InformaTiger | Der Grund warum ich das neu schreibe ist, da ich mein Algorithmendenken bzw meine Programmiermethodik verbessern möchte ich lerne gerade auf eine Klausur und deshalb habe ich das selbst implementiert. Ich habe das mit dem null terminierer zwar auch vermutet, nachdem ich das length * sizeof(char) durch ein ++length * sizeof(char) ausgetauscht habe und festgestellt habe, dass dies keinen Unterschied macht hab ich es wieder zurückgeändert - werd ich aber auf jeden Fall nochmals anpassen. Ich lade den Quelltext heute nachmittag hoch, habe ihn nur leider grade nicht bei der Hand. Ja, das mit Zeile 46 stimmt; habe den Kommentar // numbers.c erst nachträglich hinzugefügt weswegen es sich verschoben hat. Danke inzwischen. Edit: habe den Quelltext im Beitrag nun angehängt. Mit freundlichen Grüßen InformaTiger |
||||||||||||
18.02.2017, 06:41 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Hätte dein Edit fast nicht gesehen. Wenn ein paar Stunden dazwischenliegen, schreibe besser einen neuen Beitrag. Jetzt verstehe ich, Project Euler ein number->data = malloc((1+length) * sizeof(char)); in Zeile 17 sollte es richten. Es kommt zwar noch nichts richtiges raus, aber es läuft durch. Was machst du, wenn beide Zahlen verschieden lang sind? |
||||||||||||
Anzeige | |||||||||||||
|
|||||||||||||
19.02.2017, 09:36 | Auf diesen Beitrag antworten » | ||||||||||||
InformaTiger | Oh, ok. Ich dachte nur ich will nicht mit Beiträgen "vollspammen", aber ok - fürs nächste mal schreib ich einfach einen neuen Leider läuft das Programm immer noch nicht durch. Ich bekomme immer noch denselben Fehler als vorhin Ob die Zahlen unterschiedlich lang sind, ist in diesem Kontext unerheblich da diese Zahlen mit denen ich rechne so oder so gleich lang sind. Für meine Funktion number_add gilt jedoch dass Parameter 1 (also die erste Zahl) größer bzw länger oder gleich lang der 2. Zahl ist. Edit: hab mir gedacht, dass es vielleicht daranliegt, dass ich einen string der mit strcpy angelegt wurde nicht mit realloc reallozieren kann. Leider hat memcpy aber auch nicht geholfen Mit freundlichen Grüßen InformaTiger |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|