Arrayausgabe.

Dieses Thema im Forum "C/C++" wurde erstellt von iverson702, 23.03.2006.

  1. #1 iverson702, 23.03.2006
    iverson702

    iverson702 Grünschnabel

    Dabei seit:
    20.03.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo Zusammen,
    beim ausfuehren des Programms (siehe unter), bekomme ich folgender Fehler :
    Warning: function returns address of local variable. Ich weisse nicht wieso.
    -Wie kann ich diese Fehlermeldung beseitigen?
    Was ich machen moechte ist folgendes.
    Die Arrayswerte, die in ErgBuffer[k] geschrieben werden, sollen zurueck gegeben werden und nicht mit Printf auf dem Commando gezeigt werden. Also die Rueckgabe soll in der Methode GetArrayCut geschehen, weil diese Werte wo anders spaeter gebraucht werden.
    -Wie kann ich das so machen, dass mir die markeiten Bereiche (in dem Fall, die Arrayswerte in ErgBuffer[k]) in GetArrayCut zurueck gegeben werden sollen, ohne die printf.

    /* Array_Cut.c */
    #include <stdio.h>
    #include <stdlib.h>

    int Start_Cut; //Anfangbereich
    int End_Cut; //Endbereich

    unsigned char* GetArrayCut ( unsigned char *Buffer,int Start_Cut , int End_Cut)
    {
    /*typedef uchar unsigned char;*/
    const size_t buf_length = ( End_Cut - Start_Cut) + 1;

    unsigned char ErgBuffer[buf_length];
    int i, k;
    for (i = Start_Cut, k = 0; i <= End_Cut; i++, k++)
    {
    ErgBuffer[k] = Buffer; /*ergebnisarray faengt bei 0 an!!*/
    return ErgBuffer;

    }

    }

    int main ()
    {
    unsigned char liste[] =
    {1,21,213,245,54,12,33,45,56,2,5,3,6,5,4,7,8,9,200,125,147,123};

    int i;
    int Start = 2 ;
    int End = 21;
    unsigned char *result = GetArrayCut ( liste, Start, End ) ;
    }.

    PS: Bitte wenn moeglich koennt ihr die Aenderung dran schreiben?
    Besten Dank.
    Iverson702
     
  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. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Wenn Du in der Funktion GetArrayCut ein Array anlegst und zurueckgibst, ist der Speicherbereich nach Beendigung der Fkt. nicht mehr fuer ErgBuffer reserviert, sondern kann vom Programm ueberschrieben werden.

    Du musst ErgBuffer als Argument mituebergeben:
    Code:
    unsigned char* GetArrayCut ( unsigned char *Buffer,int Start_Cut , int End_Cut, unsigned char* ErgBuffer)
    
    und dann innerhalb der Fkt. den Speicher fuer ErgBuffer mit calloc o.ae. reservieren:
    Code:
    const size_t buf_length = ( End_Cut - Start_Cut) + 1; 
    
    ErgBuffer = calloc(sizeof(unsigned char), buf_length);
    if(ErgBuffer == NULL)
    {
       // Fehler beim Speicherreservieren
    } 
    // weiter mit Deinem Code...
    
    Falls Du in c++ schreibst, nimmst Du 'new' statt calloc oder noch _viel_ besser, einen std::vector<unsigned char> als Typ von ErgBuffer.

    fuer ErgBuffer darf bei Aufruf von GetArrayCut noch kein Speicher reserviert sein, sonst musst Du noch ein 'free' vor dem calloc einbauen.
     
  4. MTS

    MTS Kaiser

    Dabei seit:
    09.11.2002
    Beiträge:
    1.242
    Zustimmungen:
    0
    Ort:
    NRW, Bochum
    ausserdem solltest du einmal überprüfen, ob die return anweisung wirklich in der for Schleife stehen soll!
     
  5. #4 iverson702, 23.03.2006
    iverson702

    iverson702 Grünschnabel

    Dabei seit:
    20.03.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Hy,
    erst mal danke fuer deine Typs, aber ich habe versucht folgendes Programm zum kompilieren und es laueft imme rnicht.
    Vielleicht koenntest du mir ja helfen.

    /* Array_Cut.c */

    #include <stdio.h>
    #include <stdlib.h>

    int Start_Cut; //Anfangbereich
    int End_Cut; //Endbereich

    unsigned char *GetArrayCut ( unsigned char *Buffer,int Start_Cut , int End_Cut, unsigned char *ErgBuffer)
    {
    //typedef uchar unsigned char;
    const size_t buf_length = ( End_Cut - Start_Cut) + 1;

    //den Speicher fuer ErgBuffer mit calloc o.ae. reservieren:
    ErgBuffer = calloc(sizeof(unsigned char), buf_length);
    if(ErgBuffer == NULL)
    { /*Fehler beim Speicher reservieren*/
    }

    //neuen Buffer mit Laenge buf_length erzeugen
    unsigned char ErgBuffer[buf_length];
    int i, k;
    for (i = Start_Cut, k = 0; i <= End_Cut; i++, k++)
    {
    ErgBuffer[k] = Buffer; /*ergebnisarray faengt bei 0 an!!*/
    return ErgBuffer; // Rueckgabe des markiertes Teils

    }
    }

    int main ()
    {
    unsigned char liste[] =
    {1,21,213,245,54,12,33,45,56,2,5,3,6,5,4,7,8,9,200,125,147,123};

    int i;
    int Start = 1 ;
    int End = 20;

    unsigned char *result = GetArrayCut ( liste, Start, End) ;

    }
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Arrayausgabe.