Fehler bei Zeigern ?

Diskutiere Fehler bei Zeigern ? im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hi, um mich mit den Zeigern etwas besser auseinanderzusetzen habe ich eine kleine Methode geschrieben die 2 strings vertauscht , mir ist klar das...

  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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    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. E/A-Fehler (.snapshots is not a btrfs subvolume).

    E/A-Fehler (.snapshots is not a btrfs subvolume).: Hallo zusammen, ich habe mir nun einmal OpenSuse angeschaut da mir das Rolling Realease doch sehr zusagt. Ich habe bei der Installation ein...
  2. LibreOffice veranstaltet Fehlersuche

    LibreOffice veranstaltet Fehlersuche: Das LibreOffice-Projekt hat zur Fehlersuche in LibreOffice 7.0 aufgerufen, das in diesen Tagen als erste Alphaversion erscheinen wird. Die Aktion...
  3. Tails 3.15 behebt kritische Fehler

    Tails 3.15 behebt kritische Fehler: Tails 3.15 schließt unter anderem einige kritische Sicherheitslücken und behebt bereits länger bestehende Fehler. Weiterlesen...
  4. 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...
  5. 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...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden