Array-Hilfe bitte



  • Also folgendes Problem.
    die Klasse liest eine Datei ein.
    sucht ä momentan nur und soll diese zu ä umwandeln jedoch
    funktionier das nicht sow wie ich es gern hätte.

    ich verwende den Microsoft Compiler VC++. net

    Die Compielierung funktioniert aber...
    das Programm wirft eine Fehlermeldung.
    Debug Assertion Failed!!!
    Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

    Der Quelltext wo die meldung kommt.

    char* SearchEdit::replace(char *buff)
    {
    	unsigned long filesize=0;
    	// Mit der ersten Schleife berechnen wir die länge des neuen Buffers.
    	for (unsigned long i=0; i!=m_filesize;++i)
    	{
    		if (buff[i]=='ä' || buff[i]=='ö' || buff[i]=='ü')
    		{
    			filesize+=6;
    		}
    
    	}
    
    	filesize=m_filesize+filesize;
    	// Neuen Buffer erstellen mit der neuen grösse
    
    	char* buffer=new char[filesize+1];
    
    	std::cout <<filesize+1;
    
    	// Nun der Haupt part
    	unsigned long ni=0;
    	for (unsigned long i=0; i!=m_filesize;++i,++ni)
    	{
    		if (buff[i]=='ä')
    		{
    			buffer[ni]='&';
    			buffer[++ni]='a';
    			buffer[++ni]='u';
    			buffer[++ni]='m';
    			buffer[++ni]='l';
    			buffer[++ni]=';';
    		}
    		else
    		{
    			buffer[ni]=buff[i];
    		}
    
    	}
    
    	buffer[filesize]='\0';
    
    	if (buff!=NULL) // Alten buffer löschen
    	{
    		delete[] buff;
    		buff=NULL;
    	}
    
    	return buffer;// Neuen zurück geben
    }
    


  • Stimmt was nicht mit der Beschreibung??

    Brauchts mehr ...

    bitte antwort??

    brauche dringend hilfe



  • Du überschreibst dir irgendwo den Speicher. Das passiert nicht an der Stelle, an der Fehler bemerkt wird (beim delete), nicht einmal zwangsläufig in dieser Funktion. Wie sieht denn der Aufruf aus? Gibst du überhaupt einen Zeiger rein, den du mit new geholt hast?



  • Stimmt was nicht mit der Beschreibung??

    Brauchts mehr ...

    bitte antwort??

    brauche dringend hilfe



  • ich hab den buffer mit new geholt.
    Jedoch hab ich schon eine neue lösung gefunden und hab mich dazu entschlossen.
    Die C++ Standart bibliothek. String. verwendet,

    mit dieser geht es einfacher.

    Trotzdem danke..

    und da das keine resoucen fressendes programm ist.
    brauch ich mir auch keine gedanken um geschwindigkeits einbussen zu machen.
    Danke.. trotzdem..



  • hmm schrieb:

    und da das keine resoucen fressendes programm ist.
    brauch ich mir auch keine gedanken um geschwindigkeits einbussen zu machen.
    Danke.. trotzdem..

    Selbst wenn es eins wäre, würde das garantiert nicht an std::string liegen. Hier würde nämlich primär die Entwicklung/Umsetzung deiner eigenen Algorithmen die Ursache sein.



  • PuppetMaster2k schrieb:

    Selbst wenn es eins wäre, würde das garantiert nicht an std::string liegen. Hier würde nämlich primär die Entwicklung/Umsetzung deiner eigenen Algorithmen die Ursache sein.

    Ich denke diese meldung ging gegen diesen algorithmus.
    Dank der string klasse konnte ich auf die zweite schleife verzichten.
    was den algorithmus wiederum schneller macht.


Anmelden zum Antworten