C:初始状态\r崩溃
尝试使用initstate\r时发生崩溃:C:初始状态\r崩溃,c,random,crash,segmentation-fault,C,Random,Crash,Segmentation Fault,尝试使用initstate\r时发生崩溃: (gdb) run Starting program: /home/user/test.out Program received signal SIGSEGV, Segmentation fault. 0x40052d00 in initstate_r () from /lib/libc.so.6 守则: #include <stddef.h> #include <stdio.h> #include <string.h
(gdb) run
Starting program: /home/user/test.out
Program received signal SIGSEGV, Segmentation fault.
0x40052d00 in initstate_r () from /lib/libc.so.6
守则:
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define STATELEN 256 /* random number state buffer */
main()
{
char randomStateBuffer[STATELEN];
struct random_data randData;
printf("Before initstate");
/* seed the random number generator */
initstate_r (time(NULL), (char *)&randomStateBuffer, STATELEN,
(struct random_data *)&randData);
printf("initstate done");
}
我曾尝试在gcc 3.3.6和4.3.3中编译此文件,但都出现了崩溃。在调用initstate\r之前,尝试将randData struct归零。 memset&randData,0,随机数据的大小;
从本页中得到提示:在调用initstate\r之前,请尝试将randData struct归零。 memset&randData,0,随机数据的大小;
从本页中得到提示:查看函数签名,第二个参数只是一个char*。从随机状态缓冲区中删除运算符的地址
initstate_r (time(NULL), randomStateBuffer, STATELEN,
(struct random_data *)&randData);
查看函数签名,第二个参数只是一个字符*。从随机状态缓冲区中删除运算符的地址
initstate_r (time(NULL), randomStateBuffer, STATELEN,
(struct random_data *)&randData);
?这个问题看起来非常类似于: 另见: 以及:
该函数的手册页很难理解,但似乎rand_数据在传递到initstate_r之前应该进行初始化。这个问题看起来非常类似于: 另见: 以及:
该函数的手册页很难理解,但似乎在传递到initstate_r之前应该初始化rand_数据。我也经历过同样的困难,它通过0-ing状态和rand_数据来工作,在您的情况下,删除缓冲区前面的(&N):
char randomStateBuffer[STATELEN];
struct random_data randData;
memset(randomStateBuffer, 0, sizeof(randomStateBuffer));
memset(&randData, 0, sizeof(struct random_data));
initstate_r(time(NULL), randomStateBuffer,sizeof(randomStateBuffer), &randData);
为我工作。我也经历过同样的困难,它通过0-ing状态和随机数据来工作,在您的情况下,删除缓冲区前面的(&N):
char randomStateBuffer[STATELEN];
struct random_data randData;
memset(randomStateBuffer, 0, sizeof(randomStateBuffer));
memset(&randData, 0, sizeof(struct random_data));
initstate_r(time(NULL), randomStateBuffer,sizeof(randomStateBuffer), &randData);
为我工作。memset&randData,0,结构随机数据的大小;仍然崩溃。gdb运行启动程序:/home/zeno/test433.out程序收到信号SIGSEGV,分段故障。从/lib/libc.so.6在initstate_r中输入0x40052c33这对我来说是个问题,但请注意,您需要将这一点与Joe Valenzuela关于在randomStateBuffer.memset&randData上删除运算符addAddress的说明结合起来,0,sizeof struct random_data;仍然崩溃。gdb运行启动程序:/home/zeno/test433.out程序收到信号SIGSEGV,分段故障。0x40052c33在initstate_r from/lib/libc.so.6中这对我来说是个问题,但请注意,您需要将其与Joe Valenzuela关于在randomStateBuffer上删除运算符addAddress的注释结合起来。+1并且,除非确实需要,否则不要强制转换;否则,它只会阻止编译器帮助您处理这样的错误。+1并且,除非您真的必须,否则不要强制转换;否则,它只会阻止编译器帮助您处理这样的错误。