Ваша random_value
функция выделяет некоторую память, заполняет ее случайными значениями, а затем освобождает. Он никогда не использует переданный в него указатель ни для чего. Он не помещает случайное значение туда, куда указывает этот указатель, он не копирует случайные значения в память, указанную этим указателем, он не возвращает указатель на вызывающую функцию, и даже если он это сделал - он освобождает блок памяти в любом случае. Таким образом, вызывающий не сможет получить доступ к случайным значениям.
Давайте пройдемся по строке:
void random_values(float *arr, int N) // "arr" is used like an array to
//keep random float values
{ // "N" is the length of the array
int i;
float max_range=1000.00;
arr=(float *)(malloc(sizeof(float)*N));
Хм, а что? Мы получили массив, который должны были использовать, но затем мы полностью заменили это значение указателем на другой массив?
srand(time(0));
for(i=0; i<N; i++)
{
*(arr+i)=((float)rand()/(float)(RAND_MAX)) * max_range;
}
free(arr);
Хорошо, мы храним все случайные значения в блоке памяти, но тогда мы free
блок памяти? Какой в этом смысл?
}
random_values(arr, lenght);
for(i=0;i<lenght;i++)
printf("%.2f\n", *(arr+i));
Этот код передает arr
в random_values
, что игнорирует его. Затем он печатает содержимое arr
, которое, вероятно, содержит случайный мусор, так как ничто никогда не следовало за этим указателем, и помещает данные туда, куда он указывал.