You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将void*转换为double时触发Segmentation Fault,原因是什么?

为什么这段代码会出现Segmentation Fault?

你的代码出现段错误的核心原因是访问了非法内存地址:

  • 代码里void * p = (void *) 1234;是把整数1234强制转换成了指针地址,这个地址(十六进制为0x4D2)属于操作系统保留或程序无权访问的内存区域。
  • 后续double n = *(double *)p;试图从这个非法地址读取8字节(double类型的字节数)数据,直接触发了操作系统的内存保护机制,因此抛出Segmentation Fault。

正确的处理方式

如果只是想把整数1234转换成double类型,完全不需要指针操作,直接做类型转换即可:

// 直接赋值或转换
double n = 1234.0;
// 或者从整数变量转换
int num = 1234;
double n = (double)num;

如果确实需要通过void*传递double数据,要让指针指向合法的double变量地址:

double val = 1234.0;
void *p = &val;
double n = *(double *)p;

内容的提问来源于stack exchange,提问作者Mary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:40:55