srandom_r的段错误

问题描述 投票:4回答:3

我不知所措。这个琐碎的代码给了我Segfault,可能是什么错误?

struct  random_data *qq;

qq = calloc(50, sizeof(struct random_data));
srandom_r(time(NULL), qq);

现在,如果我这样更改它,它将起作用:

struct  random_data qq;

srandom_r(time(NULL), &qq);

我一定是个笨蛋,但我不明白。请帮助。

更新:calloc返回有效的指针

(uint64_t) 1aa5010

但是,&qq代表指针

(uint64_t) 7fffbb428090

这就是区别,但是还不清楚为什么srandom_r无法执行。我尝试在Linux 2.6.32-44-服务器#98-Ubuntu

我不知所措。这个琐碎的代码给了我Segfault,可能是什么错误? struct random_data * qq; qq = calloc(50,sizeof(struct random_data)); srandom_r(time(NULL),qq);现在,如果我...

c linux random reentrancy
3个回答
5
投票

似乎大多数答案从未真正尝试运行您的代码。这是一个非常简约的程序,确实显示了您的问题:


1
投票

[您可能希望添加一个测试,calloc()是否成功,因为最可能通过NULL会引起细分违规。


0
投票

'random_data'不包含保存随机数生成器状态的内存-它保存该状态所处的状态。...

© www.soinside.com 2019 - 2024. All rights reserved.