为什么我的函数有范围时会返回这么大的随机值?

时间:2019-04-21 19:35:06

标签: c random

我正在尝试获取指针范围内的随机浮点值,但它给了我一些很大的数字。我认为我的错误出在函数调用中,但我不确定。

这是功能:

#include <time.h>
#include <stdlib.h>
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);
}

在这里我调用该函数并尝试将其打印出来:

random_values(arr, length);
for(i=0;i<length;i++)
    printf("%.2f\n", *(arr+i));

1 个答案:

答案 0 :(得分:1)

您的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的内容,该内容可能包含随机垃圾,因为没有任何内容跟随该指针并将数据放置在其指向的位置。