Avance
Cadet 2nd Year
- Registriert
- Feb. 2006
- Beiträge
- 22
Hi folks,
ich hab ein kleines, ungewöhnliches Problem. Ich habe eine Funktion für meine Klassenbibliothek erstellt. Die Funktion heißt asrepc - was für "Ansi String Replace Character" steht. So sieht sie aus:
Das Problem ergibt sich wie man sehen kann beim Schreiben auf die Speicherstelle. Die Variablen die ich im Funktionsaufruf übergebe ist weder konstant noch besitzt sie irgendeinen anderen Modifizierer. Lesen von der Speicherstelle funktioniert ganz normal. Hier 2 verschiedene Arten von Aufrufen:
Ich habe euch hier nochmal ein Screenshot während des Debuggens hochgeladen: Bitte hier klicken.
In einer anderen Funktion schreibe ich ebenfalls auf eine Speicherstelle, nur nicht auf die Quelle. Es handelte sich dabei um eine eigene Konvertierungsroutine, die von ANSI Strings in MBCS umwandelte. Da meine Bibliothek jetzt jedoch kein MBCS mehr unterstützen soll, sondern nur ANSI und Unicode, habe ich auch die Funktion entfernt. Jedenfalls lief diese Funktion auch mit der Übergabe eines Zeigers auf ein Zeichen (char*). Und die obengenannte Funktion bringt dies komischerweise nicht fertig.
Hat irgendjemand eine Ahnung was ich falsch mache? Oder ist der Compiler schuld?
Übrigens: Es macht keinen Unterschied ob in Debug, Release oder mit ANSI oder Unicode kompiliert wird.
Vielen Dank für Eure Hilfe!
ich hab ein kleines, ungewöhnliches Problem. Ich habe eine Funktion für meine Klassenbibliothek erstellt. Die Funktion heißt asrepc - was für "Ansi String Replace Character" steht. So sieht sie aus:
Code:
inline uint asrepc( char* pcString, char cFindWhat, char cReplaceWith )
{
assert( pcString ); // muss ungleich Null sein
assert( cFindWhat > 32 ); // darf kein Steuerzeichen sein
assert( cReplaceWith > 32 ); // darf auch kein Steuerzeichen sein
register uint ui = 0; // Zähler für die ersetzten Zeichen
while( 0x00 != *pcString )
{
if( *pcString == cFindWhat ) {
*pcString = cReplaceWith; // hier ergibt sich die Zugriffsverletzung
ui++;
}
pcString++;
}
return( ui );
}
Das Problem ergibt sich wie man sehen kann beim Schreiben auf die Speicherstelle. Die Variablen die ich im Funktionsaufruf übergebe ist weder konstant noch besitzt sie irgendeinen anderen Modifizierer. Lesen von der Speicherstelle funktioniert ganz normal. Hier 2 verschiedene Arten von Aufrufen:
Code:
char* pcText = "this is my text";
asrepc( pcText, ' ', '_' ); // Zugriffsverletzung
char acText[] = "this is my text";
asrepc( acText, ' ', '_' ); // keine Zugriffsverletzung, das Ersetzen funktioniert
Ich habe euch hier nochmal ein Screenshot während des Debuggens hochgeladen: Bitte hier klicken.
In einer anderen Funktion schreibe ich ebenfalls auf eine Speicherstelle, nur nicht auf die Quelle. Es handelte sich dabei um eine eigene Konvertierungsroutine, die von ANSI Strings in MBCS umwandelte. Da meine Bibliothek jetzt jedoch kein MBCS mehr unterstützen soll, sondern nur ANSI und Unicode, habe ich auch die Funktion entfernt. Jedenfalls lief diese Funktion auch mit der Übergabe eines Zeigers auf ein Zeichen (char*). Und die obengenannte Funktion bringt dies komischerweise nicht fertig.
Hat irgendjemand eine Ahnung was ich falsch mache? Oder ist der Compiler schuld?
Vielen Dank für Eure Hilfe!