Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.11.12
Prihlásený: 08.11.12
Príspevky: 1
Témy: 1
Príspevok NapísalOffline : 08.11.2012 11:28

Zdravím,
mám menší problém s vrátením poľa z funkcie.

Kód:
#include <stdio.h>


int * function(void)
{
    int array[5]={1,2,3,4,5};
    printf("\n");
    return &array[0];
}
int main(void)
{
    int * pointer=function();
    for(int a=0; a<5; a++)
    {
        printf("%d ", *(pointer+a));
    }
    return 0;
}


Vrátim adresu prvého prvku poľa z funkcie, uložím ju do pointru a postupne vypisujem hodnoty, avšak niektoré prvky nevypíše správne. Neviete kde by mohol byť problém?

//edit: Prípadne dá sa pole vrátiť z funkcie nejak inak?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 08.11.2012 18:43

Pole vo funkcii musíš alokovať funkciou malloc. Takto sa ti pole vytvorí len na zásobníku a zneplatní sa už po skončení funkcie. To, že ti niektoré prvky vypíš správne, je náhoda (resp. môže to byť preto, že tá pamäť sa nevyužíva inak/vypisuješ to hneď po funkcií a tie dáta tam stále sú)

a btw. platí, že array = &array[0]


Offline

Užívateľ
Užívateľ
vrátenie pola

Registrovaný: 24.08.12
Prihlásený: 09.02.19
Príspevky: 59
Témy: 0
Príspevok NapísalOffline : 08.11.2012 19:01

Lokální proměnné, tedy i pole, existují jen po dobu vykonávání funkce, takže ty se v main() pokoušíš vypsat něco co už neexistuje, a bylo přepsáno další činností programu. Tak buď předávej té funkci ukazatel na pole deklarované v main(), které má změnit, nebo naopak použij statické pole, které existuje "navždy", a při každém zavolání té funkce ho najdeš ve stavu v jakém jsi ho nechal naposledy:

static int array[5]={1,2,3,4,5};

Potom s ním pomocí odkazu můžeš pracovat i jinde v programu, ale je to prasárna s velkým nebezpečím bočních efektů!

Mimochodem, to for(int a=0; a<5; a++) je také prasárna, takovéhle novoty si nech do C# a drž se C90, to ti bude fungovat všude ;-)







_________________
"Existuje pouze jeden člověk, který má méně přátel než Bill Gates, a tím je Saddám Husajn." (Paul Grayson)
Odpovedať na tému [ Príspevkov: 3 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. AJAX - vratenie pola

v JavaScript, VBScript, Ajax

9

502

26.02.2010 15:46

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vratenie penazi...

v Obchody, reklamácie a právo

11

1198

04.07.2011 16:25

adastt Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie tovaru

v Notebooky a netbooky

3

593

27.04.2013 11:38

haffen Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vratenie chladica

v Obchody, reklamácie a právo

8

603

15.10.2010 17:06

Dzeky Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vratenie produktu

v Obchody, reklamácie a právo

6

1243

15.07.2009 16:07

psichac Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vratenie penazi

v Obchody, reklamácie a právo

23

17328

04.11.2010 21:22

HIISS Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie penazí

v Obchody, reklamácie a právo

4

588

06.12.2013 20:08

DwEjtSvK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie dosky

v Obchody, reklamácie a právo

10

1148

02.04.2008 23:21

Leachim Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vratenie tovaru

v Obchody, reklamácie a právo

7

1177

03.11.2009 10:29

dominique Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vrátenie tovaru

v Obchody, reklamácie a právo

4

946

26.04.2020 0:21

greener Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie tovaru

v Obchody, reklamácie a právo

17

767

25.10.2014 17:28

deefler Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie peňazí?

v Obchody, reklamácie a právo

2

1146

11.11.2009 8:38

eltorino Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie peňazí

v Obchody, reklamácie a právo

1

755

21.03.2014 17:21

killer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. alza vratenie penazí

v Obchody, reklamácie a právo

29

3731

03.02.2016 15:39

danq Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Alza vrátenie peňazí

v Obchody, reklamácie a právo

6

1605

14.10.2014 16:23

Daron Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vrátenie notebooku - neprevzatie

v Obchody, reklamácie a právo

2

771

10.09.2011 20:17

cheiron Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra