Arry aus einer Funktion übergebn

#3652679
Lesenswert?

Hallo Leute ich GOOge schon seit 2h und habe immernoch kein example
das mir die Augen öffnet :(

Ich möchte einfach nur ein ARRY aus einer Funktion die in einer Lib ist 
in meine main() holen.

Hier mal ein einfacher Code der natürlich nicht geht aber vlt braucht es 
nur ganz wenig um mir da weiter zu helfen.
1
//header arry_test:
2
int arry_test();
3

4
//source arry_test:
5
int arry_test()
6
{
7
int arry[2];
8

9
arry [0] = 10;
10
arry [0] = 10;
11
arry [0] = 10;
12

13
return arry;
14

15
}
16

17
//main:
18
int zahl1 = arry_test[0];
19
int zahl2 = arry_test[1];
20
int zahl3 = arry_test[2];

Danke für jede antwort
#3652701
Lesenswert?

Mathias Feld schrieb:
> Hallo Leute ich GOOge schon seit 2h und habe immernoch kein example
> das mir die Augen öffnet :(

Sieh dir mal
String-Verarbeitung in C
an. Und dort ganz speziell den Punkt 4



> aber vlt braucht es
> nur ganz wenig um mir da weiter zu helfen.

Leider nicht.
Da braucht es eher sogar ganz viel um zu verstehen, warum das nicht 
geht, welche Möglichkeiten man hat und warum in C, zumindest im 
allgemeinen Fall, alle Möglichkeiten in dem einen oder anderen Fall 
Krücken sind.


Allerdings ist dein Codebeispiel so grundlegend vermurkst, dass der 
Gedanke dir ein C-Buch mehr als dringen nahe zu legen, sich förmlich 
aufdrängt.
Gast #3652748
Lesenswert?

>Kann er sich nich einfach nen Zeiger auf das Array als
>Funktionsrückgabewert zurückgeben lassen?

Nö, weil der Speicher dann schon wieder weg ist.
Klassischer Speicherzugriffsfehler.


Früher, als ich klein war, nannte man das auch noch Array.
Gast #3652772
Lesenswert?

Der TO hat ja erstmal grundlegendere Probleme.

1. Array Grössen-Deklaration
2. Lebensdauer von Variablen

Malloc/Free ist dann erst die Lösung, wenn er diese beiden gelöst resp. 
verstanden hat. Und selbst dann kommen erstmal noch die Zeiger und 
Zeiger auf Zeiger. malloc/free ist dann erst der nachfolgende Schritt.
Gast #3652854
Lesenswert?

Fred schrieb:
> Du hast nicht verstanden.

Doch, hat er.
Er hat deine Frage wer den Speicher, der innerhalb einer Funktion 
mittels malloc() angefordert und als Zeiger zurückgegeben wird, freigibt 
eindeutig und richtig beantwortet.

Nämlich der caller mittels free().

In der Interfacebeschreibung dieser Funktion muss natürlich vermerkt 
sein dass ein Speicherleck entstehen kann, wenn der Caller den Zeiger 
verwirft ohne den Speicher freizugeben.
#3652997
Lesenswert?

Karl Heinz schrieb:
> Mathias Feld schrieb:
>> Hallo Leute ich GOOge schon seit 2h und habe immernoch kein example
>> das mir die Augen öffnet :(
>
> Sieh dir mal
> String-Verarbeitung in C
> an. Und dort ganz speziell den Punkt 4

Mir fällt gerade auf, dass im zitierten Artikel eine wichtige 
Möglichkeit fehlt:
1
struct array_int_3 { int array[3]; };

Wer's testen möchte:
1
struct array_int_3 array_test() 
2
{ 
3
    // …
4
} 
5

6
int main() 
7
{ 
8
    struct array_int_3 array = array_test(); 
9
    printf("%d\n", sizeof(array_test())/sizeof(int)); 
10
    // …
11
    return 0; 
12
}
#3654190
Lesenswert?

A. H. schrieb:
> Karl Heinz schrieb:
>> Mathias Feld schrieb:
>>> Hallo Leute ich GOOge schon seit 2h und habe immernoch kein example
>>> das mir die Augen öffnet :(
>>
>> Sieh dir mal
>> String-Verarbeitung in C
>> an. Und dort ganz speziell den Punkt 4
>
> Mir fällt gerade auf, dass im zitierten Artikel eine wichtige
> Möglichkeit fehlt:

Korrekt.
Nur hat diese Methode wieder den Nachteil, dass sie nur mit fixen 
Array-Längen funktioniert.
Als Vorteil muss man allerdings anführen, dass man durch die Verpackung 
eines Arrays in eine struct zumindest die Zuweisbarkeit von speziellen 
Arrays hergestellt hat.

Fazit: Egal wie man es dreht und wendet, es gibt keine 'one size fits 
all' Methode in C. Irgendeine Krot muss man immer schlucken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren