gpt4 book ai didi

c - C 中缺少数组数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:46 25 4
gpt4 key购买 nike

我有一个代码可以创建一个包含 1000 个随机条目的数组和一个将它们分箱到直方图中的例程。当我查看直方图的结果时,我发现 0 比应有的多得多。我可以调试代码,我发现虽然我的原始数组看起来是正确的,但在我将数组传递给下一个例程后,最后几个条目现在为 0。此外,如果我在同一个例程中运行更多行,甚至更多条目变为 0。有没有人知道可能是什么原因造成的?

引用代码如下:

int n = 1000;
int m = 100;
double r;
double *p;//line 22
p = generate_random( n ); //returns array of length n containing random numbers between 0 and 1
r = group(p, m, n);
...
double group(double* rnd, int m, int n)
{
int count[100] = { 0 };
int length = n;
int i, bin;//line 66
double dx = 1/(double) m;//length of each interval

for (i = 0; i < length; i++)
{
bin = (int) floor(*(rnd+i)/dx);//line 71
count[bin]++;//count[0] should be the number of random elements between 0 and 0.1
}
...//some more code that sets return double

当我在第 22 行创建 p 后进入调试器时,我可以看到 p 包含 1000 个随机数:

print *p = 0.78846
print *(p+851) = 0.3475
print *(p+999) = 0.9325

在第 66 行,它包含 less:

print *rnd = 0.78846
print *(rnd+851) = 0.3475
print *(rnd+999) = 0

在第 71 行 (i = 0) 甚至更少:

print *rnd = 0.78846
print *(rnd+851) = 6.9533e-310
print *(rnd+999) = 0

编辑:这是 generate_random 的代码:

double * generate_random( int  n )
{
const unsigned int a = 1664525;
const unsigned int b = 1013904223;
const unsigned int M = pow(2,32);

int i;
double random_numbers[n];

unsigned int rnd = time(NULL)%M; //number of seconds since 00:00 hours,
// Jan 1, 1970 UTC

for (i = 0; i < n; i++)
{
rnd = (a*rnd + b)%M;
random_numbers[i] = (double) rnd;

//map to [0,1]
random_numbers[i] = random_numbers[i]/M;
}


return random_numbers;
}

最佳答案

您将 random_numbers 分配为一个局部变量,将其放置在堆栈中。当您返回它时,该存储不再保留,因此结果未定义。相反,要么在堆上分配数组 malloc(sizeof(double)*n) 或者,更好的是,在调用者中分配数组并将数组传递给 generate_random 函数,该函数可以填充它. 如果你在堆上分配,那么一定要在完成后释放它。

关于c - C 中缺少数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com