acces Violation / read of Adress xxx
-
Hi leutz,
ich habe eine Fehlermeldung bei einem Programm, also nach dem es compiliert wird, und ich es aus der IDE Starte (Borland IDE 5.0) kommt die Fehlermeldung:
Fault:Acces Violation @ 0x412f83: read of Adress 0xffffffff
dann klicke ich da auf Ok, und dann öffnet die Ide den Debugger (oder sowas...) und da stehen Assembleranweisungen / die Dumps der Register.
ich habe dieses problem schon des öfteren gehabt, und es hat immer wieder die selbe Charakeristika:
Der Debugger, der mir den Inhalt des Speichers Anzeigt, zeigt immer auf das Assembler Kommando >repnz scasb< und dann ist da immer ein String Markiert der bisher immer MZP hieß.
Ich habe diesen Error immer im zusammenhang mit Printf() erhalten. Ich würde gerne wissen, was diese Fehlermeldung ganz generell bedeutet, in erster linie.
Natürlich würde es mir auch helfen, wenn ich den Code einfach umschreibe, ohne das die Fehlermeldung kommt, aber ich würde schon gerne verstehen, warum die kommt, was sie bedeutet, und wie ich mit sowas umgehe. Hier mein Code, der ist in einer selbstgeschriebenen H Datei und wird von main auferufen....
Code:
int get_system_info(void){
DWORD Major, Minor, Build, ID;
TCHAR Cver[128];
OSVERSIONINFO os_Info; // versioninfo Struktur erstellenos_Info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); // muß vor aufruf von GVE
rc = GetVersionEx(&os_Info); // gemacht werden, sagt API
if (rc == TRUE){
printf("Systemabfrage gelungen\n");
Major = os_Info.dwMajorVersion;
Minor = os_Info.dwMinorVersion;
Build = os_Info.dwBuildNumber;
ID = os_Info.dwPlatformId;
//Cver = (TCHAR)os_Info.szCSDVersion;
printf("Major Version: %s\n",Minor);
printf("Major Version: %s\n",Build);
printf("Major Version: %s\n",ID);
printf("Major Version: %s\n",Cver);
}
else{
printf("Systemabfrage Error\n");
}
return 0;
}ich habe den Variablen die werte der Struktur zugewiesen, weil...hm, warum hatte ich das gestern eigentlich gemacht... wenn ich direkt die Struktur bei printf() angab, gab es auch irgend einen Error, beim Compilieren.
wenn ich einen Step Into mache, sehe ich, das der Fehler genau dann auftritt, wenn er die erste versionsinfo printen soll (in diesem Posting Minor, eigentlich wäre das aber Major, egal...)
//Cver = (TCHAR)os_Info.szCSDVersion;
habe ich auskommentiert, weil es ein LValue required error beim Compilieren gab, warum ? ich habe Cver als TChar deklariert, und in der Stuktur info zu OSVERSIONINFO steht das >szCSDVersion< ein TChar mit 128 Chars ist, wieso haut das dann nicht hin ? müßte doch passen.
-
lol, das sind alles DWORDs und du gibst sie bei printf als strings aus (%s). weiss nicht ob das der fehler ist.
-
yo, DWORDS sind doch 4 bytes. Wie soll ich sie denn sonst ausgeben - mit %c gebe ich nur ein Byte aus.
-
ich würd %d nehmen