Inicjalizacja tablicy dynamicznej w funkcji i zwrócenie jej do maina

0

Czy ktos moglby mi podpowiedziec jak poprawic moj kod?
Niestety ale nie mam pomyslu jak to zrobic..

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct lista {
    int dane;
    struct lista* nastepny;
};

int stworz_i_wypelnij_tablice(int* tablica);
void dodaj_element();
void wywal_element();
void przeczytaj_dany_element();

int main(int argc, char** argv)
{
    int* tablica;

    tablica = stworz_i_wypelnij_tablice(tablica);

    free(tablica);

    return 0;
}

int stworz_i_wypelnij_tablice(int* tablica)
{
    int rozmiar_tablicy;
    int i_petla;
    int zarodek;
    time_t czas;

    zarodek = time(&czas);
    srand(zarodek);

    printf("Podaj rozmiar jaki ma miec tablica: ");
    scanf("%d", &rozmiar_tablicy);
    tablica = malloc(rozmiar_tablicy * sizeof(int));

    for (i_petla = 0; i_petla < rozmiar_tablicy; i_petla++) {
        tablica[i_petla] = rand();
    }

    return *tablica;
}
0

Na wstępie.
zarodek = time(&czas);
i tu koniec zmiennej czas...

Usuń zmienna czas i zrób:
zarodek = time(NULL);

ale zarodek też nie jest potrzebny.
zrób:
srand( time(NULL) );

( w razie braku zrozumienia man time )

co do tablicy to albo przekarzesz **int i wtedy możesz zapisać coś pod swoim ptr i nie starcić tego. Albo zrób *int maketab( void ); I zwróć pointer.

i_pętla możesz wsadzić w for bo to nie jest w jakiejś innej pętli jeszcze więc tak jest przerzyściej.

0

Losowanie zrozumialem, ale jak poradzic sobie z tablica niestety nie... Moglbys powtorzyc troszke inaczej?

0

Chcesz gdzieś wsadzić swoją tablice do ptr prawda to albo:`


*int stworz_i_wypelnij_tablice( void )
{

    int * tablica = NULL;
    int rozmiar_tablicy;
    int i_petla;
    int zarodek;
    time_t czas;
 
    zarodek = time(&czas);
    srand(zarodek);
 
    printf("Podaj rozmiar jaki ma miec tablica: ");
    scanf("%d", &rozmiar_tablicy);
    tablica = malloc(rozmiar_tablicy * sizeof(int));
   if( tablica == NULL ) return tablica;
 
    for (i_petla = 0; i_petla < rozmiar_tablicy; i_petla++) {
        tablica[i_petla] = rand();
    }
 
    return tablica;
}

i w main po prostu int *moja_tab = stworz_i_wypelnij_tablice();

albo musisz przekazać ptr swojego ptr bo inaczej malloc nadpisze kopie którą przekazałeś i jakby to rzec ciągłosć się skończy

void  stworz_i_wypelnij_tablice( int **tablica )
{
    int rozmiar_tablicy;
    int i_petla;
    int zarodek;
    time_t czas;
 
    zarodek = time(&czas);
    srand(zarodek);
 
    printf("Podaj rozmiar jaki ma miec tablica: ");
    scanf("%d", &rozmiar_tablicy);
    *tablica = malloc(rozmiar_tablicy * sizeof(int));
   if( *tablica == NULL ) return;
 
    for (i_petla = 0; i_petla < rozmiar_tablicy; i_petla++) {
        (*tablica)[i_petla] = rand();
    }

}

i wtedy
int *moja_tab;
stworz_i_wypelnij_tablice( &moja_tab );

0

Myslalem ze w c nie ma referencji... W sensie, ze funkcja moze zwrocic tylko jedna wartosc przez return...

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