[ 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 | 1
NapísalOffline : 08.11.2012 11:28 | vrátenie pola

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 | 3
NapísalOffline : 08.11.2012 18:43 | vrátenie pola

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 | 0
NapísalOffline : 08.11.2012 19:01 | vrátenie pola

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)
 [ Príspevkov: 3 ] 


vrátenie pola



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

505

26.02.2010 15:46

Ďuri

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

Vratenie penazi

v Obchody, reklamácie a právo

23

17339

04.11.2010 21:22

HIISS

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

Vrátenie penazí

v Obchody, reklamácie a právo

4

592

06.12.2013 20:08

DwEjtSvK

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

Vrátenie dosky

v Obchody, reklamácie a právo

10

1153

02.04.2008 23:21

Leachim

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

vratenie tovaru

v Obchody, reklamácie a právo

7

1182

03.11.2009 10:29

dominique

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

vrátenie tovaru

v Obchody, reklamácie a právo

4

957

26.04.2020 0:21

greener

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

Vrátenie tovaru

v Obchody, reklamácie a právo

17

773

25.10.2014 17:28

deefler

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

Vrátenie peňazí?

v Obchody, reklamácie a právo

2

1150

11.11.2009 8:38

eltorino

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

Vrátenie peňazí

v Obchody, reklamácie a právo

1

764

21.03.2014 17:21

killer

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

Vratenie penazi...

v Obchody, reklamácie a právo

11

1204

04.07.2011 16:25

adastt

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

Vrátenie tovaru

v Notebooky a netbooky

3

599

27.04.2013 11:38

haffen

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

Vratenie chladica

v Obchody, reklamácie a právo

8

607

15.10.2010 17:06

Dzeky

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

vratenie produktu

v Obchody, reklamácie a právo

6

1249

15.07.2009 16:07

psichac

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

Qcomp vratenie tovaru

v Obchody, reklamácie a právo

2

515

28.04.2015 9:00

Trojan4x4

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

Alza - vrátenie peňazí?

v Obchody, reklamácie a právo

26

1083

12.02.2015 19:15

Daron

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

Datart- vratenie tovaru

v Obchody, reklamácie a právo

6

2244

14.12.2014 10:45

dzulio



© 2005 - 2024 PCforum, edited by JanoF