Nie zwraca poprawnie wskaźnika

0

Co jest nie tak z moim kodem,za każdym razem zwraca kompletnie złą wartość,mimo ,że algorytm funkcji działa dobrze- po pobraniu numeru elementu od którego ma zacząć oraz zakończyć,tworzy nową tablicę o odpowiednim rozmiarze z wybranym przedziałem wartości.

Kod:


#include<stdio.h>
int *copy(int,int,int *);

int main()
{
    int tab1[]={1,2,3,4,5,6,7,8,9,10};
    int beg,end,i;

    scanf("%d %d",&beg,&end);
    int *tab2=copy(beg,end,tab1);

    for(i=0;i<10;i++) printf("%3d",tab1[i]);
    putchar('\n');
    for(i=0;i<=end-beg;i++) printf("%3d",tab2[i]);
    putchar('\n');
    return 0;
}

int * copy(int beg,int end,int *tab1)
{
    int i,tab[end-beg+1];
    int *out=tab;
    for(i=beg;i<=end;i++) tab[i-beg]=tab1[i-1];
    return out;
}


 
2
  • NIE WOLNO ZWRACAĆ WSKAŹNIKA NA LOKALNĄ PAMIĘĆ **
    Użyj malloc z stdlib.h oraz memcpy z string.h aby skopiować blok pamięci - w ten sposób wszystko odbędzie się w sposób bezpieczny i planowany.
2

zwracasz wartość która nie istnieje out przypisujesz do tablicy, ktora zostanie zniszczona przy wychodzeniu z funkcji. Zależy co chcesz uzyskać, ale wyjścia są 3:

  1. tablica tab jako static
  2. tworzyć tablicę dynamicznie (tylko potem należny pamiętać o jej zwolnieniu, chyba, że użyjesz sprytnego wskaźnika - jeśli zmieniłbyś c na c++).
  3. zmienić tablice na std::vector (to tylko przy zmianie c na c++)
0

Rozumiem,w takim razie pobawię się wyżej wymienionymi funkcjami. C++ niestety na razie odpada,nie wiem o nim nic-co dopiero zacząłem przygodę z C.
Dzięki wielkie chłopaki za pomoc! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1