我试图在指针的范围内获得随机浮点值,但它给了我一些非常大的数字。我认为我的错误在函数调用中,但我不确定。
这是功能:
#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));
你的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
的内容,这些内容可能包含随机垃圾,因为没有任何内容跟随指针并将数据放在指向的位置。