Arrayausgabe.

I

iverson702

Grünschnabel
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
 
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.
 
ausserdem solltest du einmal überprüfen, ob die return anweisung wirklich in der for Schleife stehen soll!
 
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) ;

}
 

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Unix Webserver mit HTML Seite erstellen

String auf Konsole ausgeben

GCC liefert in Eclipse Kompilierfehler

Prozesskommunikation mit PIPES - wie funktioniert das?

Zurück
Oben