- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: zwei Rückgabewerte einer Funktion?!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Was mache ich denn falsch, wenn ich mein Array nicht zurück kann ?
    Ich möchte gerne "Uhrzeit" an die Funktion zurück geben...

    Wie schon gesagt, musst du einen Zeger zurück geben.

    Aber du hast noch zwei ganz grobe Fehler!

    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Code:
    uint16_t TimeToString(uint8_t Stunden, uint8_t Minuten, uint8_t Sekunden)
    {
        char Uhrzeit[9];
    
        Uhrzeit[0] = (Sekunden >> 4)  + 0x30;
        Uhrzeit[1] = (Sekunden & 0x0f) + 0x30;
        Uhrzeit[2] = ':';
        Uhrzeit[3] = (Minuten >> 4)  + 0x30;
        Uhrzeit[4] = (Minuten & 0x0f) + 0x30;
        Uhrzeit[5] = ':';        
        Uhrzeit[6] = (Stunden >> 4)  + 0x30;
        Uhrzeit[7] = (Stunden & 0x0f) + 0x30;
        Uhrzeit[8] = '\0';
    
        return(Uhrzeit);
    
    }// Ende TimeToString
    1.
    char Uhrzeit[9];
    Ist eine lokale Auto-Variable!

    Beim Aufruf von TimeToString() wird diese auf dem Stack angelegt und nach verlassen von TimeToString() wird der Speicher wieder freigeben!
    Wenn du nun eine andere Funktion aufrufst oder eine Interruptroutine ausgeführt wird, werden die Werte überschrieben und due hast nur noch Datensalat.
    Also übe mal, wie man eine gute Salatsauce macht

    Wenn du
    static char Uhrzeit[9];
    verwendest, umgehst du dieses Problem, dann wird Uhrzeit im allgemeinen Speicher angelegt.
    Allerdings ändert jeder Aufruf von TimeToString() den Inhalt von Uhrzeit.


    2. der Rückgabewert von TimeToString() ist nicht mehr
    uint16_t
    sondern
    char *TimeToString(uint8_t Stunden, uint8_t Minuten, uint8_t Sekunden)

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Du kannst das auch in ein struct packen und dann dieses strukt zurück geben.

    Code:
    struct Uhrzeit {
     char sec;
     char min;
     char hour;
     char day;
     char month;
     char year;
    };
    
    ...
    
    Uhrzeit MyFunction()
    {
     Uhrzeit ret;
     ret.min = ...;
     ret.sec = ...;
    
     ...
     return ret;
    }
    Gruß
    Georg

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Georg,

    Du hast jetzt aber immer noch den Fehler mit der auto Variablem.
    Nach return wird der Speicher freigegeben!!

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Nein, denn es wird by value übergeben und nicht by reference.

    EDIT:
    Link
    http://courses.washington.edu/css342...32/passby.html
    http://de.wikipedia.org/wiki/Wertparameter

    - - - Aktualisiert - - -

    Ja, der Speicher wird freigegeben, aber es wird eine tiefe Kopie gemacht für den Aufrufer. Wenn ich

    return &ret;

    mache, dann habe ich ein Problem mit diesem Speicher.

Ähnliche Themen

  1. ein Int-Array einer Funktion
    Von oderlachs im Forum Arduino -Plattform
    Antworten: 13
    Letzter Beitrag: 17.02.2014, 22:50
  2. Zwei Potentiometer auf einer Achse
    Von AgesKing im Forum Mechanik
    Antworten: 7
    Letzter Beitrag: 20.12.2012, 15:33
  3. Variablen in einer Funktion bekannt machen
    Von hosti im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 05.10.2010, 21:18
  4. Antworten: 20
    Letzter Beitrag: 18.04.2010, 17:37
  5. Funktion als Rückgabewert einer Funktion?
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 08.09.2008, 10:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test