Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:初始状态\r崩溃_C_Random_Crash_Segmentation Fault - Fatal编程技术网

C:初始状态\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

尝试使用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>
#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并且,除非您真的必须,否则不要强制转换;否则,它只会阻止编译器帮助您处理这样的错误。