Tablica wypełniona liczbami pseudolosowymi

0

Hejka :)
Mam problem z funkcją zwracającą tablicę liczb losowych. Mianowicie niektóre liczby wykraczają poza zakres np. ok. 2 mln a niektóre są w porządku i wyskakuje okienko "Program przestał działać". Co jest nie tak z kodem? Pomoże ktoś? :)

#include <stdio.h>
#include <stdlib.h>
/*Napisz funkcję zwracającą tablicę liczb pseudolosowych z zakresu od 1 do 100.*/
int* tablicaLos(int n);
int main()
{
    int i;
    int* tab1=tablicaLos(10);
    for (i=0; i<10; i++)
        printf("%d  ", tab1[i]);
    return 0;
}
int* tablicaLos(int n)
{
    int i, tablica[n];
    srand(time(0));
    for (i=0; i<n ;i++)
        tablica[i]=rand()%99 +1;

    return tablica;
}

1
int *tablica;
for (i=0; i<n ;i++)
	tablica[i]=rand()%99 +1;

Tutaj jest kilka problemów:

  1. int* tablica to wskaźnik typu int, a nie tablica
  2. jest on niezainicjalizowany więc nie możesz robić tablica[i].

Jeżeli chcesz mieć dynamiczną tablicę to musisz pobawić się w zarządzanie pamięcią.

int* tablicaLos(int n);
int main()
{
	int* tab1 = tablicaLos(10);
	for (int i = 0; i < 10; i++)
		printf("%d  ", tab1[i]);

	free(tab1); // Zwalniamy pamięć
	return 0;
}
int* tablicaLos(int n)
{
	int i, *tablica;
	tablica = (int*)malloc(sizeof(int) * n); // Alokujemy potrzebną pamięć
	srand(time(0));
	for (i = 0; i<n; i++)
		tablica[i] = rand() % 99 + 1;

	return tablica; // Zwracamy wskaźnik na 1 element tablicy
}

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