这是投射long
到的正确方法void *
吗?-O2
在程序中使用时出现段错误Qt
。使用时不会出现段错误-O1
。
使用时,reinterpret_cast<void *>(tp.tv_nsec)
我还使用-O2
.
为什么会出现段错误?
timespec tp; // struct that holds nanoseconds since Epoch
clock_gettime(CLOCK_REALTIME, &tp); // tv_nsec is a long int
void *test = mmap((void *)(tp.tv_nsec), 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
printf("%p\n", test);
printf("%li\n", (long)test);
编辑: AFAIK,目标似乎表达错误。目标是获取一个随机数以分配一个随机内存地址。这样,每次我在整个测试程序中多次使用 mmap() 时,我都会得到一个随机内存地址。如果没有, mmap() 似乎是按顺序分配内存。