Hilfe fopen zerstört Variableninhalte
-
Vince schrieb:
Ups, Fehlerteufel,
vor der whileschleife wird **ctext2 natürlich noch allocated:
Was soll
**ctext2
heißen? Im Programm ist ctext2 ein einfacher char-Pointer. Du solltest das Programm übrigens möglichst so kürzen, dass der Rest noch lauffähig ist und das beschriebene Fehlverhalten reproduziert. Hier ist jetzt einfach so viel falsch, dass du das unmöglich ernst meinen kannst.
-
@aha:
Was der "w+" Parameter macht ist mir bewusst.@hehe:
Das Errorhandling habe ich extra entfernt, aber ich habe Rechte und die Datei wird auch erzeugt, aber eben mit dem fehlerhaften Inhalt der ctext2 Variable nach fopen().@Bashar:
Ich weiß zwar nicht wirklich ob Dir das Hilft, aber bitte:int function (void){ char *ctext = "Hello World!!!"; FILE *data = NULL; printf("%s", ctext); //Inhalt da data=fopen("test.txt", "w+"); printf("%s", ctext); //Inhalt ab 12. Zeichen weg fclose(data); return(0); }
-
Vince schrieb:
@aha:
Was der "w+" Parameter macht ist mir bewusst.@hehe:
Das Errorhandling habe ich extra entfernt, aber ich habe Rechte und die Datei wird auch erzeugt, aber eben mit dem fehlerhaften Inhalt der ctext2 Variable nach fopen().@Bashar:
Ich weiß zwar nicht wirklich ob Dir das Hilft, aber bitte:int function (void){ char *ctext = "Hello World!!!"; FILE *data = NULL; printf("%s", ctext); //Inhalt da data=fopen("test.txt", "w+"); printf("%s", ctext); //Inhalt ab 12. Zeichen weg fclose(data); return(0); }
Lass die Anwendung mal mit Valgrind laufen, da zerschiesst du dir irgendwo ganz böse was und nicht in dieser Funktion.
-
Du willst uns ernsthaft klarmachen, dass das so funktioniert?!
Am Anfang ist i=27 du erstellst nen buffer der größe i, aber du greift auf buffer+i zu und erhöhst i weiter!
Zudem sind w und l jeweils 0, was macht da wohl die while schleife?!
-
lagalopex schrieb:
Du willst uns ernsthaft klarmachen, dass das so funktioniert?!
Am Anfang ist i=27 du erstellst nen buffer der größe i, aber du greift auf buffer+i zu und erhöhst i weiter!
Zudem sind w und l jeweils 0, was macht da wohl die while schleife?!Ja ich hab das i auf 27 gestellt, weil in einer anderen Funktion die Länge der Datei festgestellt wird, aber da ich den Quelltext kürzen musste habe ich das auf 27 gestellt, da die Textdatei aus der ich lese 27 Zeichen beinhaltet.
stack corruption schrieb:
Lass die Anwendung mal mit Valgrind laufen, da zerschiesst du dir irgendwo ganz böse was und nicht in dieser Funktion.
Das Probiere ich mal aus, danke
-
Vince schrieb:
stack corruption schrieb:
Lass die Anwendung mal mit Valgrind laufen, da zerschiesst du dir irgendwo ganz böse was und nicht in dieser Funktion.
Das Probiere ich mal aus, danke
So, hab es jetzt mal mit mehreren Debuggern (unter Windows und Linux) durchlaufen lassen, leider bringen die mir auch nicht viel, die stürzen alle beim fopen()befehl ab.
Folgende Meldung kommt:
malloc(): Memory Corruption!Hoffentlich kann jemand etwas damit anfangen...
-
Vince schrieb:
Vince schrieb:
stack corruption schrieb:
Lass die Anwendung mal mit Valgrind laufen, da zerschiesst du dir irgendwo ganz böse was und nicht in dieser Funktion.
Das Probiere ich mal aus, danke
So, hab es jetzt mal mit mehreren Debuggern (unter Windows und Linux) durchlaufen lassen, leider bringen die mir auch nicht viel, die stürzen alle beim fopen()befehl ab.
Folgende Meldung kommt:
malloc(): Memory Corruption!Hoffentlich kann jemand etwas damit anfangen...
Das liegt nicht an fopen, du hast dir deinen Stack schon wo ganz anders zerschossen.
-
Soo, habe das Problem jetzt (zufällig) selber durch eine neuinstallation von cygwin gelöst.
Trozdem danke an alle für Euere Mühe.
Gruß Vince
-
Vince schrieb:
Soo, habe das Problem jetzt (zufällig) selber durch eine neuinstallation von cygwin gelöst.
Lösen durch Systemneustart??? das wird dir bestimmt irgendwann mal wieder über die Ohren fliegen. Verwende lieber valgrind und gdb um zu gucken, wo die Fehler liegen, denn du zerschiesst dir irgendwo den Stack.
-
Ich habe mein System nicht neugestartet, sondern lediglich Cygwin neuinstalliert, wie schon oft gesagt mein Stack war und ist einwandfrei. Seit dem ich die neueste Version von gcc habe läuft das Programm auf allen System einwandfrei.