Programm bleibt hängen
-
Servs Leute,
sorry wegen der Überschrift, aber mir ist nichts besseres eingefallen.
Also, es geht darum das ich eine Datei abspeicher und auch wieder öffne. Das Funktioniert auch wunderbar. Wenn ich das Prgramm dann ohne "Dynamische RTL verwenden" und ohne "Mit Laufzeitpackages compilieren" optionen compiliere und versuche eine Datei dann zu öffnen oder zu speichern bleibt das Programm hängen und es kommt nur der Windows-Ladencursor. Ich weis nicht woran das liegt. Bin für jeden Tip dankbar. Nun noch mein Quellcode für's ladenvoid readFile(char filename[255]) { FILE* datei; datei=fopen(filename,"r+"); fseek(datei,0,SEEK_SET); for(int i=1;i <= 16; i++){ fscanf(datei,"%s ",&struktur[i].name); fscanf(datei,"%i ",&struktur[i].min); fscanf(datei,"%i ",&struktur[i].max); fscanf(datei,"%i ",&struktur[i].crash); fscanf(datei,"%i ",&struktur[i].checked); struktur[i].current = struktur[i].max; } fscanf(datei,"%i ",&struktur[0].interval); fscanf(datei,"%i ",&struktur[0].step); fclose(datei); }
Ich benutze den C++ Builder 5 Prof. und habe WinXP Prof. + SP1 am laufen auf einem XP2200+ mit 512MB RAM.
MfG und danke
Basti[ Dieser Beitrag wurde am 07.03.2003 um 13:31 Uhr von B@sti editiert. ]
-
WO bleibts hängen?
-junix
-
Mist, richtig debuggen
Der fehler liegt wo anders. Ich habe eine Funktion die mir den Text in die EditBoxes schreibt. Die sieht so ausvoid setCaptions() { Form1->Edit1->Text = struktur[1].name; //Erste Zeile Form1->Edit5->Text = struktur[2].name; Form1->Edit9->Text = struktur[3].name; Form1->Edit13->Text = struktur[4].name; //... und noch viele weitere }
und schon bei der ersten Zeile kommt eine Fehlermeldung vom debugger "Im Projekt ist eine Exeption der EAccessViolation aufgetreten...".
Und wie im ersten Beitrag geschriebenohne "Dynamische RTL verwenden" und ohne "Mit Laufzeitpackages compilieren"
.
Ich hoffe mir kann einer helfen.MfG
Basti
-
Hi,
sind die Strings in der Struktur nullterminiert?
mfg
v R
-
ist zum Zeitpunkt des Exceptions jeder Zeiger (also Form1, struktur, etc.) gültig?
-junix
-
@junix:
Ich denke schon, denn kurz vorher füll ich ja noch meine Struktur.@virtuell Realisticer:
JaSonst noch irgendwas?
MfG
Basti
-
hmm komisch, mein post wurde wohl net gesaved *wunder*
Versuch mal das prog im abgesicherten modus zu compilieren.
Weil diese Fehlermeldungen kamen bei mir scho oft; es lag immer daran, dass mein RAM voll war, und nach nem reboot ging wieder alles.
J0
-
Wenn ich nach dem einlesen der Datei die Funktion "setCaptions" auskommentiere dann kommt die Fehlermeldung in der Project1.cpp. Die Zeile hab ich markiert
[cpp]
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->Title = "Konfigurationstool";
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->Run();
**} // Die Exeption kommt an dieser stelle
**catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}[/cpp]Ich kann mir das einfach nicht erklären. Und das mit dem RAM kann ich mir nicht vorstellen. Hab noch genug frei und will net neu starten. Und das kommt bei zwei Projekten vor in den ich diese zwei Funktionen benutze.
MfG
Basti
-
Klingt für mich so als würdest du sonst irgendwo nen hund begraben haben.
-junix
-
Ja, und den würd ich gern ausgraben
Wie in der ersten Nachricht geschrieben kommt das nur wenn ich ohne "Dynamische RTL verwenden" und ohne "Mit Laufzeitpackages compilieren" compiliere und wenn ich es mit mache dann Funktioniert das Programm. Ich habe mir den kompletten Code durchgeschaut und da er relativ einfach ist geht das auch und es ist nirgends ein Fehler zu entdecken. Ich habe auch schon das Komplette Programm in ein neues Projekt übertragen aber keine Chance. Ich hoffe das irgendjemand noch einen guten Rat für mich hat.
@junix oder V R welche BCB Version benutzt ihr? Hätte vielleicht einer mal lust es bei sich zu kompilieren ob es vielleicht an meinem PC liegt. Ich würde es als rar in einer e-Mail zukommen lassen.
MfG und danke
Basti
-
Hi B@sti
Du liest mit fscanf(...) Daten ein: - i.a. fuer 'Text'- orirntierte Daten (Textfile oder scanf bei Tastatur) !!! Wenn Datei nicht genug Zeilen enthaelt(oder Fehler), wartet der auf neue Eingaben !!! - aus Datei kommen die nie! - Wie schreibst Du die Daten in die Datei !!! sicher: am Ende fflush(.. ) ausfuehren, sonst kann Ende der Daten verloren gehen! - ist stdio.h eingebunden - Wenn nicht, arbeiten die Funktionen u.U. unsauber!
[ Dieser Beitrag wurde am 07.03.2003 um 20:16 Uhr von DerAltenburger editiert. ]
-
Hi, danke für die Tips, aber an dem Datei einlesen bzw schreiben liegt es nicht. Der Fehler taucht später auf siehe Beitrag 3 und/oder 8.
Kann es sein das der BCB5 Pro ein prob mit Windows XP hat?
Ich habe gerade das Update für den BCB installiert, hat sich aber auch nichts geändert.MfG
Basti
-
Wann fuehrst Du setCaptions(...) aus?
- ist die Form da schon richtig geladen
- ist 'struktur' da schon gueltig (falls dynamisch: erzeugt?)Falls Du in OnCreate der Form arbeitest: probiers mal in OnActivate
::: unguenstig dabei, es wird spaeter wiederholt aufgerufen :::
::: nur zum Testen :::
-
Hallo
ich verwende BCB 4 prof und ich wuerde es mal uebersetzen, wenn es nict zu gross ist
MfG
Klaus
-
@DerAltenburger
Das ist alle beachtet.
Ich werde es am Monat im Büro mal kompilieren, da hab ich ein Win2K System. Ich denke immernoch das es an dem WinXP liegt. Ansonsten meld ich mich nochmal.Danke für eure Hilfe.
MfG und schönen Samstagabend
Basti
-
Hab
' noch 'ne Idee:fscanf(datei,"%s ",&struktur[i].name)
!!! bei scanf / fscanf mit Format "%S" braucht's nicht den &- Operator (darf nicht) !!!
-
Naja, kommt drauf an, wie struktur definiert ist. Das hat uns Basti ja verwährt.
-
Also,
unter Win2000 kommt auch ein Fehler.
Es liegt nicht am einlesen, mein Debugger hatt mit dem einlesen kein Problem, und wenn ich den Inhalt meiner Struktur überprüfe dann steht auch alles richtig drin.
*heul*Und nu?
MfG
Basti
-
Zeig doch 'mal Deine Struktur!
Wann Wo und Wie erzeugst Du die passende Variable 'struktur'(statisch oder dynamisch)?
-
OK,
habs nicht hinbekommen. Hab jetzt alles relevante in eine Datei gepackt, der aufbau ist der selbe geblieben. Der Code ist aus der "Unit1.cpp"Hier der Link zu der Datei: [edit] Cut [/edit]
MfG und Danke
Basti[ Dieser Beitrag wurde am 10.03.2003 um 23:37 Uhr von B@sti editiert. ]
-
Hi B@sti,
Ich glaub' ich hab's!(???)
Du machst Dir den Speicherinhalt kaputt!!!
Du hast
dri drink[16];und arbeitest mit
for(int i=1;i <= 16; i++) das Array ab!!!DER INDEX MUSS ABER VON 0 BIS 15 GEHEN!
Kontrollier mal an allen Stellen. Du screibstst hinter das Array! :p