| | |
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
Autor | Správa |
---|
Registrovaný: 08.11.12 Prihlásený: 08.11.12 Príspevky: 1 Témy: 1 | Napísal Fillo: 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?
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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]
|
|
Registrovaný: 24.08.12 Prihlásený: 09.02.19 Príspevky: 59 Témy: 0 | Napísal faraon: 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) |
|
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| AJAX - vratenie pola v JavaScript, VBScript, Ajax | 9 | 502 | 26.02.2010 15:46 Ďuri | | Vratenie penazi... v Obchody, reklamácie a právo | 11 | 1198 | 04.07.2011 16:25 adastt | | Vrátenie tovaru v Notebooky a netbooky | 3 | 593 | 27.04.2013 11:38 haffen | | Vratenie chladica v Obchody, reklamácie a právo | 8 | 603 | 15.10.2010 17:06 Dzeky | | vratenie produktu v Obchody, reklamácie a právo | 6 | 1243 | 15.07.2009 16:07 psichac | | Vratenie penazi v Obchody, reklamácie a právo | 23 | 17328 | 04.11.2010 21:22 HIISS | | Vrátenie penazí v Obchody, reklamácie a právo | 4 | 588 | 06.12.2013 20:08 DwEjtSvK | | Vrátenie dosky v Obchody, reklamácie a právo | 10 | 1148 | 02.04.2008 23:21 Leachim | | vratenie tovaru v Obchody, reklamácie a právo | 7 | 1177 | 03.11.2009 10:29 dominique | | vrátenie tovaru v Obchody, reklamácie a právo | 4 | 946 | 26.04.2020 0:21 greener | | Vrátenie tovaru v Obchody, reklamácie a právo | 17 | 767 | 25.10.2014 17:28 deefler | | Vrátenie peňazí? v Obchody, reklamácie a právo | 2 | 1146 | 11.11.2009 8:38 eltorino | | Vrátenie peňazí v Obchody, reklamácie a právo | 1 | 755 | 21.03.2014 17:21 killer | | alza vratenie penazí v Obchody, reklamácie a právo | 29 | 3731 | 03.02.2016 15:39 danq | | Alza vrátenie peňazí v Obchody, reklamácie a právo | 6 | 1605 | 14.10.2014 16:23 Daron | | Vrátenie notebooku - neprevzatie v Obchody, reklamácie a právo | 2 | 771 | 10.09.2011 20:17 cheiron |
| 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
|
|