Hi, hat von euch jemand eine liste mit den Grundlagen zu C (Hardware nah). sitz gerade vor nem problem. Wie kann ich ein Array aus ner Funktion zurück geben lassen? (Datentyp ist BYTE). Damit ich an solchen dingen nicht allzu lang hängen bleibe, würde ich mir so eine liste wünschen, kennt von euch jemand eine im netz? gruß miri
Miriam schrieb: > Wie kann ich ein Array aus ner Funktion > zurück geben lassen? (Datentyp ist BYTE). das hat erstmal nicht mit Hardware zu tun. Wer legt den Speicher für das Array an? In C kann man nur zeiger zurückgeben du darst aber auf keinen fall ein zeiger auf ein lokales array zurückgeben!
das bedeutet, dass ich gar kein array in einer funktion erzeugen kann und dann durch aufruf der funktion den wert einer anderen funktion übergeben kann? beispiel: BYTE * meineFunktion() { BYTE meinArray[8] = {1,2,3,4,5,6,7,8}; return meinArray; } void andereFunktion() { BYTE Array[8] = meineFunktion(); } das funktioniert dann wohl nicht, oder? wie löse ich dann dieses problem? v.g. miri
Hallo miri, Variablen, die Du in einer Funktion anlegst, werden im allgemeinen auf dem Stack angelegt. Der Stackpointer wird nach Verlassen der Funktion wieder zurückgesetzt. Der Speicher kann dann wieder für etwas anderes verwendet werden. Lebensgefährlich für die Daten in deinem Array.
es kommt darauf an wo man programmiert. Auf einem PC würde man es soch machen BYTE * meineFunktion() { BYTE* meinArray = (BYTE*)malloc( sizeof(BYTE)*8 ); return meinArray; } Aber jetzt muss auch noch jemand den Speicher mit free freigeben!!!! Willkommen bei C auf einem µC könnte man es so machen void meineFunktion(BYTE* a) { a[1] = 42; } BYTE meinArray[8]; meineFunktion( meineFunktion );
Das Stichwort ist hier sowas wie "Call by reference". Du übergibst also der Funktion meineFunktion einen Pointer auf das zu füllende Array. MfG Marius
@ Peter: Funktioniert die PC Version nicht auch auf einem µC? 2. Bist du Sicher, dass der Speicherplatz auch nach dem Verlassen der Funktion noch für diesen Speicherbereich reserviert ist? Wenn ja, kann man ihn außerhalb der Funktion wieder freigeben? Z.B.: temp = meineFunktion(); free(temp);
Autonomer Alkoholiker schrieb: > @ Peter: > > Funktioniert die PC Version nicht auch auf einem µC? > Für malloc() brauchst Du ein Betriebssytem (oder Du musst Dir die malloc-Funktion selbst schreiben). Dann geht's auch auf einem uC.
Wolfgang Bengfort schrieb: > Autonomer Alkoholiker schrieb: >> @ Peter: >> >> Funktioniert die PC Version nicht auch auf einem µC? >> > Für malloc() brauchst Du ein Betriebssytem (oder Du musst Dir die > malloc-Funktion selbst schreiben). > Dann geht's auch auf einem uC. Naja ganz so ist dem nicht, malloc kann man mit z.B. der avr-libc verwenden, das ist eine Library-Implementierung, die auf dem Heap arbeitet. Bei einem AVR macht das aber nur Sinn, wenn entsprechend viel Speicher vorhanden ist, also typischerweise externer Speicher. Gruss, Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.