Fehler bei Zeigern ?

Dieses Thema im Forum "C/C++" wurde erstellt von Nano, 15.03.2009.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi, um mich mit den Zeigern etwas besser auseinanderzusetzen habe ich eine kleine Methode geschrieben die 2 strings vertauscht , mir ist klar das man das auch anders lösen kann.
    Wenn ich das ganze richtig verstanden habe sollte folgendes auch ohne probleme laufen


    Code:
    
    bool swap_strings(char * str1, char * str2){
    	int lenstr1 = 0;
    	int lenstr2 = 0;
    	lenstr1 = strlen(str1);
    	lenstr2 = strlen(str2);
    
    	if(lenstr1 != lenstr2)
    	{
    		return false;
    	}
    	char  tmp = '\0';
    	int i;
    	for(i = 0; i < lenstr1; i++ )
    	{
    		tmp = *(str1 + i);
    		cout << tmp << endl;
    //---	//	*(str1 + i) = *(str2 + i);
    //---	//	*(str2 + i) = tmp;
    	}
    	cout << "str 1 neu : " << str1 << endl;
    	cout << "str 2 neu : " << str2 << endl;
    	return true;
    
    }
    
    leider erhalte ich eine Exception : Status_Access_Violation
    der fehler liegt bei dem mit //--- // kommentierten code, allerdings verstehe ich nicht wo.

    *(str1 + i) entspricht dem inhalt/wert von str1 , es sollte also eigentlich nur eine ganz normale char vertauschung stattfinden oder ?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 15.03.2009
    Zuletzt bearbeitet: 16.03.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    soweit ich das sehen kann, ist deine Funktion auch korrekt, ich vermute dass der Fehler beim Aufruf liegt.

    Ich vermute dass du die Funktion in etwa so getestet hast?
    Code:
    int main()
    {
        char * hallo = "hallo";
        char * welt = "welt!";
    
        bool result = swap_strings(hallo, welt);
    
        std::cout << result << std::endl;
    }
    
    In so ziemlich jeder mir bekannten Programmiersprache sind die standard String Objekte immutable, und das ist auch in C++ nicht anders. Mit anderen Worten, du versuchst auf den Speicher einer konstanten Variablen zuzugreifen und das wird mit einem Speicherzugriffsfehler belohnt.

    Das folgende sollte funktionieren:

    Code:
    int main()
    {
        char * hallo = (char *)malloc(6);
        memcpy(hallo, "hallo", 6);
    
        char * welt = (char *)malloc(6);
        memcpy(welt, "welt!", 6);
    
        bool result = swap_strings(hallo, welt);
    
        std::cout << result << std::endl;
    
        free(hallo);
        free(welt);
    }
    
    Allerdings ist es laenger her dass ich etwas in C++ geschrieben habe, ich glaube malloc und free sollte man eigentlich nur in C benutzen, in C++ gab es da eventuell andere Funktionen fuer, aber das Prinzip sollte klar sein.

    Im uebrigen ziehe ich persoenlich definitiv str deinem *(str + i) Konstrukt vor, ich finde str viel lesbarer.

    mfg,
    bytepool
     
Thema:

Fehler bei Zeigern ?

Die Seite wird geladen...

Fehler bei Zeigern ? - Ähnliche Themen

  1. Terminal Fehlermeldung

    Terminal Fehlermeldung: Hola, mir ist aufgefallen das ständig ein Fehler erscheint sobald ich einen Terminal öffne. Hat zwar keine Auswirkung auf die Arbeit damit sieht...
  2. LibreOffice 5.1.1 korrigiert Fehler

    LibreOffice 5.1.1 korrigiert Fehler: Das LibreOffice-Projekt hat die Verfügbarkeit der Version 5.1.1 der freien Office-Suite bekannt gegeben. In diesem planmäßigen Update werden...
  3. Fehler in glibc gefährdet zahlreiche Systeme

    Fehler in glibc gefährdet zahlreiche Systeme: Sicherheitsforscher haben eine Sicherheitslücke in der glibc-Bibliothek entdeckt, die sich von externen Angreifern über das Netzwerk ausnutzen...
  4. LibreOffice veranstaltet Fehlerjagd

    LibreOffice veranstaltet Fehlerjagd: Das LibreOffice-Projekt hat angekündigt, vom 15. bis 17. Januar die mittlerweile dritte öffentliche »Bug Hunting Session« für Version 5.1 der...
  5. Linux.Encoder: Das Laster der fehlerhaften Kryptografie

    Linux.Encoder: Das Laster der fehlerhaften Kryptografie: Der mittlerweile in der dritten Generation nun vorliegende Ransomware »Linux.Encoder« kann immer noch kaum Schrecken unter Linux verbreiten -...