Fehler : "Stack arond the varable 'x' was corrupted"

lindin

Erfahrenes Mitglied
Hallo, ich bekomme während des Ausführens einen Runtime chaeck failure:
"Stack arond the varable 'x' was corrupted"

Kann mir jemand sagen, was das bedutet?
Ich denke mal, daß heißt irgendwas mit Speicherverletzung, aber das kann eigentlich nicht sein...
 
In der Tat, das ist eine Speicherverletztung. Das zeigt an, das du über den Speicherbereich
geschrieben hast, der der Variable zugehörig ist.
 
Also, das gnaze passiert bei folgender Funktion:

Code:
char* SuchenErsetzen(char* Finden,char* Ersetzen,char* Text){
	
	char buffer1[BUFFERSIZE] = "";	
	char buffer2[BUFFERSIZE] = "";	
	char *ptr;
	strcpy(tmp,Text);	
	while( (ptr = strstr(tmp,Finden)) != NULL ) {	
		_strset(buffer1,0);		
		_strset(buffer2,0);		
		strncpy(buffer1,tmp,(strlen(tmp) - strlen(ptr)));	
		strcat(buffer1,Ersetzen);
		strcpy(buffer2, ptr + strlen(Finden));	
		strcat(buffer1,buffer2);
		strcpy(tmp,buffer1);
		
	}	
	return tmp;
}

Ich verwende diese Funktion, um Sonderzeichen mit bestimmten HExwerten zu ersetzen!

Bei folgenden Sonderzeichen passiert dann der Fehler:

², ³, µ, §

Es kommt auch nicht immer diese FEhlermeldung, sondern auch manchmal direkt diese FEhlermeldung mit xyz hat ein Problem festgestell...

Wenn ich dann Debugge, dann liegt der FEhler in der Funktion strsrt:

Code:
strstr  proc

        mov     ecx,[esp + 8]       ; str2 (the string to be searched for)

        push    edi                 ; Preserve edi, ebx and esi
        push    ebx
        push    esi

        -->hier :mov     dl,[ecx]            ; dl contains first char from str2

        mov     edi,[esp + 10h]     ; str1 (the string to be searched)

        test    dl,dl               ; is str2 empty?
        jz      empty_str2

        mov     dh,[ecx + 1]        ; second char from str2
        test    dh,dh               ; is str2 a one-character string?
        jz      strchr_call         ; if so, go use strchr code

?
 
kannst du noch den Aufruf der Funktion mit reinnehmen oder eine compilierbare Version ?
Was ist tmp globaler speicher ?
 
Also, ich rufe das ganze folgendermaßen auf:
ich nehm mal einen Aufruf, bei dem der Fehler passiert:
Code:
sprintf(zwischen,"%c%c",0xc2,0xb2);
text=SuchenErsetzen("²",zwischen,text);

tmp ist genauso deklariert wie buffer1 und buffer2!
text ist vom Typ char[255]
zwischen ist vom Typ char[10]

Bei folgendem Aufruf passiert der Fehler nicht:

Code:
sprintf(zwischen,"%c%c",0xc3,0x89);
text=SuchenErsetzen("É",zwischen,text)

?
 

Neue Beiträge

Zurück