Seite 1 von 2
Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 8:49 pm
von BLACK_AXE
Hy
hab ein problem. Ich möchte in die datei C:windows.system32.driver.etc.hosts. eine neue "ip" eintragen.
dies wollte ich jetzt mit C realisieren hab aber jetzt folgenden fehler:
Zugriffsverletzung bei Adresse 32566694 in Modul 'CC3250M.DLL' Lesen von Addresse F9B0E5E8.
hab versucht die datei in einer .txt umzubenennen hat dan auch geklappt.
hättet ihre eine Idee wisso das net klappt ?
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:03 pm
von cloidnerux
Zugriffsverletzung bei Adresse 32566694 in Modul 'CC3250M.DLL' Lesen von Addresse F9B0E5E8.
Das bedeuted erstmal, das du versucht auf ein Modul zuzugreifen, was dein Programm aber aus Technischen gründen nicht darf, weil die addresse an einem geschützten Speicherbereich steht.
Das sieht für mich aus, als hättest du mit einem Pointer mist gebaut, als ihn an eirgendeiner stelle falsch verwendet, z.B sowas:
Code: Alles auswählen
int *ptr = malloc(....);
//Hier statt einer Variable zuweisen, dem Pointer eine neue Addresse zuweisen, weil das ' * ' vergessen wurde.
ptr = 12;
Außerdem musst du die Datei nicht als .txt umbennen, denn die Endung macht für dein programm kein unterschied, es handelt sich vorher wie nacher um ein Dokument, mit 8-Bit Text (char).
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:14 pm
von BLACK_AXE
danke für die schnelle Antwort
das mit ptr=12; funktioniert ja nicht weil eine Konvertierung von int nach FILE nicht möglich.
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:19 pm
von cloidnerux
das mit ptr=12; funktioniert ja nicht weil eine Konvertierung von int nach FILE nicht möglich.
Doch ist möglich. Denn FILE ist nur ein define für den Pointer auf eine Struktur.
Und wenn man vlt mal etwas unaufmerksam war, und man so eine meldung bekommt, kann es leicht passieren, dass man dann
schreibt. Das sollte der Compiler Problemlos schlucken.
Aber was mir gerade einfällt. Es kann sein, das du durch die änderung der Endung den Datei-handle ungültig werden lässt, da der auf eien andere Datei verweist.
Evt musst du dein FILE Pointer auf die neue Datei Refernezieren.
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:19 pm
von Xin
Hallo Black Axe,
BLACK_AXE hat geschrieben:danke für die schnelle Antwort
das mit ptr=12; funktioniert ja nicht weil eine Konvertierung von int nach FILE nicht möglich.
Leider beschreibst Du nicht, was Du genau tust.
Wenn Du mit Visual Studio entwickelst, sollte das Programm im Testlauf genau an der Stelle stehen bleiben, wo es knallt.
Ohne diese Informationen und ohne Quelltext kann niemand sagen, was da schief geht. Mit extrem hoher Wahrscheinlichkeit wird eine Variable nicht korrekt initialisiert sein. Kann es sein, dass beim Kompilieren des Quelltextes Warnungen ausgegeben werden?
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:26 pm
von BLACK_AXE
ich stell mal den Quelltext rein vll. hilfts ja.
Code: Alles auswählen
{
FILE *datei;
char path[50];
sprintf( path, "C:/WINDOWS/system32/drivers/etc/hosts");
datei = fopen ( path, "a+");
fprintf(datei, "meine ip"); //schreibe den Datensatz
fclose(datei);
}
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:29 pm
von BLACK_AXE
es "knallt" bei fprintf zeile.
benutze Borland C++ Builder
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:32 pm
von cloidnerux
Dann stimmt wohl was beim Öffnen nicht.
Prüfe vor dem fprintf, das dein Pointer nicht 0 ist:
Code: Alles auswählen
datei = fopen ( path, "a+");
if(datei == 0)
{
//Fehlermeldung: Datei konnte nicht geöffnet werden
return;
}
Es kann sein, das an deinem Pfad etwas nicht stimmt.
Muss es unter Windows nicht egt heißen:
"C:\\WINDOWS\\System32\\drivers\\etc\host"?
Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:33 pm
von Xin
BLACK_AXE hat geschrieben:ich stell mal den Quelltext rein vll. hilfts ja.
Code: Alles auswählen
{
FILE *datei;
char path[50];
sprintf( path, "C:/WINDOWS/system32/drivers/etc/hosts");
datei = fopen ( path, "a+");
fprintf(datei, "meine ip"); //schreibe den Datensatz
fclose(datei);
}
Es gibt die Datei "C:/WINDOWS/system32/drivers/etc/hosts" nicht. Sie heißt vermutlich "C:\WINDOWS\system32\drivers\etc\hosts" und damit Du das C vermitteln kannst musst du "C:\\WINDOWS\\system32\\drivers\\etc\\hosts".
Wenn es die Datei nicht gibt, ist "datei" null. Du hast aber keine Abfrage, ob Du die Datei erfolgreich geöffnet hast, sondern Du textest einfach in eine Filehandle, dass auf keine Datei zeigt. => Bääng!

Re: Zugriffsverletzung bei Adresse 32566694
Verfasst: Mo Mai 31, 2010 9:38 pm
von cloidnerux
Wenn es die Datei nicht gibt, ist "datei" null. Du hast aber keine Abfrage, ob Du die Datei erfolgreich geöffnet hast, sondern Du textest einfach in eine Filehandle, dass auf keine Datei zeigt. => Bääng!

@Xin: Ob die Lösung in C++, mit deinen "geliebten" Exceptions wohl besser ist

?