gpt4 book ai didi

c - 在C中使用rand()生成大量 double 时发生段错误

转载 作者:行者123 更新时间:2023-12-04 10:39:21 26 4
gpt4 key购买 nike

根据gdb,这条线会导致段错误

((double) rand()/(double) (RAND_MAX)) * (r*2)

但这完全没问题
((float) rand()/(float) (RAND_MAX)) * (r*2)

我可以用花车凑合,但这让我很烦恼。我做错了什么还是 rand()无法处理 double 。

请注意,在上例的上下文中,所有出现的 float改为 double .
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct cord {
/* float or double */
float x;
float y;
};

int main() {
float r = 3.0;
int amount = 1000000;
struct cord cords[amount];

srand(time(NULL));
for (int i = 0; i < amount; i++) {

cords[i] = (struct cord) {
/* Segfault occurs when (float) is replaced with (double) */
((float) rand()/(float) (RAND_MAX)) * (r*2),
((float) rand()/(float) (RAND_MAX)) * (r*2)
};

}
}

最佳答案

在发生段错误时,没有更多的堆栈空间 分配新的 double值(value)。下一个 double 值的位置将位于非法(越界)内存地址,因此是段错误。

您的代码没有为 float 出现段错误的原因是因为浮点数是单精度的,通常需要 字节数的一半(通常为 4B)存储与双倍(通常为 8B)相比。您的代码仍然有足够的空间来存储所有的浮点数。

关于c - 在C中使用rand()生成大量 double 时发生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080163/

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