Tablice dynamiczne, alokacja pamięci

0

Hejka, mam problem z zadaniem dotyczącym tablic dynamicznych w C.
Napisz program, który:
 zapełni 100 elementową tablicę statyczną tabS wylosowanymi liczbami od 1 do 100
(funkcja losuj),
 obliczy, ile z nich jest z podanego przedziału <a,b>, a następnie utworzy tablicę
dynamiczną odpowiedniego rozmiaru i zapełni ją tymi liczbami (funkcja
nowatabDyn z parametrami: wskaźnik do tablicy statycznej tabS, liczba jej
elementów n, przedziały a i b, wskaźnik do liczby elementów tablicy dynamicznej m;
funkcja zwraca wskaźnik do tablicy dynamicznej).
Wyświetl obydwie tablice. Wykorzystaj odpowiednie funkcje.

Do tej pory udało mi sie zrobić:

int wczytaj(int n, int tab[]);
int wyswietl(int n, int tab[]);
int ile1(int n, int tab[], int a, int b);

int *nowa(int *tab, int n, int a, int b, int *m);

int main(int argc, char *argv[]) 
{
    int *m,a,b,n,i;
    n=100;
    a=45;
    b=60;
    m=0;
    int tabS[n];
    int *nowaT;
    wczytaj(n,tabS);
    wyswietl(n,tabS);
    m = ile1(n,tabS,a,b);
    printf("\n%d",m);
    nowaT = nowa(tabS,n,a,b,m);

}

int wczytaj(int n, int tab[])
{
    int i;
    for (i=0; i<n; i++)
    {
        tab[i]=rand()%101;
    }
}

int wyswietl(int n, int tab[])
{
    int i;
    for (i = 0; i<n; i++)
    {
        printf("%d ",tab[i]);
    }
}

int ile1(int n, int tab[], int a, int b)
{
    int i,m;
    m=0;
    for (i=0;i<n;i++)
    {
        if (tab[i]>a && tab[i]<b) m++;
    }

    return m;
}

int *nowa(int *tab, int n, int a, int b, int *m)
{
    int i,j,k;
    j=0;
    int *nowa = (int*)malloc(*m*sizeof(int));

    if (tab==NULL)
    {
        printf("Blad\n");
        exit(EXIT_FAILURE);
    };

    for (i=0;i<m;i++)
    {
        if (tab[i]>a && tab[i]<b)
        nowa[i]=a+rand()%b;
    }

    return nowa;
}

problem zaczyna się w tym drugim podpunkcie, ponieważ nie wiem jak dodać do tej nowej tablicy dynamicznej liczby z tej pierwszej statycznej, niestety program na końcu wyrzuca błąd :(
Będę wdzięczna za wszelka pomoc.

1

Najważniejszą rzeczą w informatyce jest ścisłe podążanie za instrukcjami; postaraj się napisać funkcję, nowaTabDyn zgodnie z tym mottem. Ma ona przyjmować jako pierwszy parametr wskażnik na tablicę stayczną, a nie integera, (int tab), i ma zwracać wskaźnik na tablicę utworzoną dynamicznie, a nie, znowu, integera, (int nowa...).
Acha, jaki to błąd i co oznacza?

0

Właśnie co do tych int przed wskaźnikami, to na uczelni oni od nas wymagają aby tak pisać. A z tym błędem to trudno powiedzieć, pod koniec wyrzuca po prostu. Przy kompilacji większych błędów nie ma.

0

A z tym błędem to trudno powiedzieć, pod koniec wyrzuca po prostu

Znowu Piszesz nieściśle; jak u Kononowicza, "nie ma niczego"? Żadnego komunikatu?

Właśnie co do tych int przed wskaźnikami, to na uczelni oni od nas wymagają aby tak pisać

Jak to tak wymagają, funkcja zwracająca wskaźnik na tablicę integerów, (dokładnie wskaźnik na integera, ale to C, tak musi być) ma sygnaturę:
int * fun();,
a nie:
int fun();.

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