fwrite/fread problem
-
Ok, also die beiden folgenden Codes funktionieren alleine(d.h. wenn ich den jeweils anderen mit /**/ entferne), aber wenn ich beide in der main habe, kommt absturz "das programm funktioniern nicht mehr"
TEST_V=read1Dfield("bla.txt",size);
REAL* M; REAL* N; M=createVector(10); N=createVector(10); for(i=0;i<10;i++){ for(j=0;j<10;j++){ M[j]=A[i][j]; } N[i]=dot(M,x,10); }
Also für mich sieht das eher danach aus(angesichts der Tatsache, dass der mir in die Datei bla, diesen Mist reinschreibt:
ð? ð? ð? ð? @ @ ð? ð? ð? ð? )dass mein read1dfield oder eben ursprünglich write1Dfield nicht funktioniert...wie es sollte...
aalso was soll ich jetzt machen?! ^^
Ich ess jetzt erstmal was...
-
Guten Appetit.
Ist völlig normal, dass z.B. double so in einer Datei aussieht.
Zeige mal die REAL Deklaration und die createVector Implementierung.
-
Danke,
#ifndef REAL_H_ #define REAL_H_ #define REAL double #endif /* REAL_H_ */
REAL* create1Dfield(int size){ REAL *Array=(REAL *)calloc(size, sizeof(REAL)); return Array; } REAL* createVector(int len){ REAL* Vector; Vector=create1Dfield(len); return Vector;
-
Mach das REAL-Ding lieber mit typedef.
Hab ich das richtig verstanden, dass das Problem verschwindet, wenn du einen Teil auskommentierst, in dem nur Lesezugriffe auf den Speicher vorkommen? Das wäre nämlich merkwürdig, sowas kommt vielleicht von einem undefinierten Ausdruck.
-
Also diese Real-header ist auf diesem Übungsblatt so vorgegeben.
Und ja, wenn ich Test_V=read.... auskommentiere funktioniert das gesamte Programm.
Umgekehrt, wenn ich oben dieses andere Programmstück auskommentiere, funktioniert TestV=read und er gibt mir auch den richtigen vektor aus.....
-
Hmm, seltsam. Wenn es zu anstrengend wäre, ein gerkürztes lauffähiges Beispiel zu machen, könntest du den Code auch z.B. auf codepad.org posten. Mit etwas Glück findet sich jemand, der das dann ausprobiert und den Fehler findet.
-
Probiere statt
REAL* M; REAL* N; M=createVector(10); N=createVector(10);
mal
REAL M[]={1.,2.,3.,4.,5.,6.,7.,8.,9.,10.}; REAL N[]={-1.,-2.,-3.,-4.,-5.,-6.,-7.,-8.,-9.,-10.};
Da dürfte dann anschließend nichts mehr abbrechen.
Liefert printmatrix denn die richtigen Ergebnisse, d.h. ist A korrekt allokiert und hat die richtigen Ergebnisse?
-
Ja, jetztt mit der Änderung bricht echt nix mehr ab.
Und ja, A liefert die korrekten Ergebnisse,
alle Ausgaben und Rechnungen unten mit A liefern die richtigen Ergebnisse(die Lösungen die rauskommen sollen haben wir angegeben).Aber warum hat das Programm abgerbochen, wenn ich Createvector benutzt habe?!
Das ist ja mist so, weil ja dann immer, wenn ich createvector und read benutze der gleiche Fehler nochmal auftauchen könnte...
-
Hallo nochmals,
Mein Abgabepartner hat das kleine, aber dumme Problemchen gelöst..REAL* V;
V=create1Dfield(*size);pFile = fopen ( fileName, "rb" );
fread (size,sizeof(int), 1, pFile);
Zweite Zeile V benötigt schon size, aber ich lese das erst später aus.
Ergo, Zeilen vertauscht und es funzt!!!
Danke nochmal für eure Hilfe.
Viele Grüße,
Slabic
-
Das hilft wohl alles nichts, versuche mittels Debugging oder zur Not mit printf rauszufinden, welche Zeile genau den Abbruch verursacht.