Ausnahmefehler bei Zeiger
-
Ich hab folgendes Problem:
Diese Codezeile verursacht beim Debugging einen ausnahmefehler:*erPtr = 'K';Ich habs auch mit anderen Zeigern probiert, aber es kommt immer diese Meldung:
Unbehandelte Ausnahme bei 0x00411706 in testus.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00417850.
Meine Entwicklungsumgebung ist diese Visual C++ 2008 Express Edition.
-
Und? Vermutlich wird erPtr auf nichts zeigen. Lösung: Lass erPtr auf etwas gültiges zeigen.
-
Ich bin noch ein ziemlicher Anfänger und hab rumprobiert.
Den Zeiger hab ich so initialisiert:char *erPtr = "Gatze";Dann wollt ich das 'G' mit einem 'K' überschreiben:
*erPtr = 'K';Wo liegt mein Fehler?
-
Ah, damit kann man schon eine genauere Beschreibung der Ursache abliefern: Du bist hier über eine der Fallen von C und C++ gestolpert, nämlich dass Stringliterale (im Quelltext direkt vorkommende Strings in "") konstant sind. Der Compiler darf sie in einem Read-Only-Bereich ablegen.
Leider darf man - aus historischen Gründen - solche konstanten Stringliterale nicht-konstanten Stringzeigern zuweisen. Damit zeigt erPtr auf einen Bereich, in dem das Schreiben verboten ist, der Compiler kann dies aber nicht abfangen. Du kannst Dich davor schützen, indem Du das Bezeigte konstant machst:
char const * erPtr = "Gatze"; *erPtr = 'K'; // wird einen Compilerfehler ergebenMöchtest Du eine änderbare Zeichenfolge haben, lege diese auf dem Stack als Array an. Der Compiler reserviert dann ausreichend änderbaren Speicher und kopiert den String dort hin.
char erStr[] = "Gatze"; *erStr = 'K'; // wird funktionieren
-
Hallo
Das geht nicht weil du so ein konstantes String-Literal erstellst. Du darfst erPtr nicht mehr verändern. Und auch beim Austausch eines Zeichens must du noch den Index der Position angeben.
Benutzt einfach std::string#include <string> ... std::string test = "Gatze"; test[0] = 'K';bis bald
akari
-
Vielen Dank!
Es hat geklappt