char == string
-
Hallo,
ich habe folgendes Problem: ich will eine If-Anfrage machen und zwar mit der Bedingung:
if (SrcName == myIt->getPath())
return 1;SrcName ist char* und myIt-> getPath() ist const string& .
Wie kann ich da eine Abfrage machen? Im Moment hängt das Programm sich immer auf, wenn ich an die Stelle komme....
Zugriffsverletzung!Vielen Dank
Eva
-
Der Vergleich an sich sollte so funktionieren. Aber eine Zugriffsverletzung deutet darauf hin, daß du auf fremdem Speicher arbeitest - hast du die Pointer "SrcName" und "myIt" überhaupt korrekt initialisiert?
-
Wie meinst du das??
Meine Funktion sieht so aus:
int Database::getID (char* cSrcName) { std::vector <Data>::iterator myIt; myIt = theCatalog.begin(); for (myIt = theCatalog.begin(); myIt != theCataolg.end(); myIt++) { if (cSrcName == myIt->getPath()) return myIt->getId(); } return 0; }Der Fehler tritt immer an dieser Stelle auf und sagt:
"Unbehandelte Ausnahme bei 0x00401027 in Server.exe: 0xC0000005: Zugrioffsverletzung-Leseposition 0xfdfdfdfdfd
-
Da bleibt immer noch die Frage, wohin der Parameter zeigt

(btw, das "myIt=begin()" for der Schleife ist überflüssig)
-
ach und der Curser springt dann immer in die Datei xstring und zeigt da auf Zeile 1402 in der steht:
int compare (const _Elem * _ptr) const { return (compare(0,_Mysize, _Ptr, _Traits::length(_Ptr))); }Durch die Aufrufe konnte ich zurückverfolgen, dass es an der stelle des anderen Code (siehe oben) ausgelöst wird....
Strange
-
char != string ist sehr wichtig ! Desweiteren sizeof(char) == 1 != sizeof(string)
Hoffentlich hilft das.
-
Die Speicheradresse 0xfdfdfdfdfd deutet darauf hin, dass der Speicher bereits wieder freigegeben wurde. Viele Compiler überschreiben den freigegebenen Speicher in der Debugversion mit einem bestimmten Muster um genau solche Fälle zu finden.
-
Also bei Debuggen stelle ich fest, dass cSrcname mit dem richtigen Namen gefpüllt ist.
myIt ist ja ein Iterator über den Vector vom Typ Data.
In Data habe ich getPath folgendemaßen defioniert:const string& Data::getPath() const { return path; }
-
Setz mal nen Breakepoint in getPath und schau ob es den string auch noch wirklich gibt.