我有这个代码:
int *b;
b = 50;
printf("Pointer point to address: %p and also point to this value: %d", b, *b);
return 0
我收到此错误:main.c:6:7:警告:赋值从整数中生成指针而没有强制转换[-Wint-conversion] timeout:被监视的命令转储核心 sh:第1行:47524分段故障超时10s主要
我想打印50字节的内存值。
我的代码是正确的还是编译器可以正常工作。
假设您在最近的操作系统(如Linux,Mac或Windows)上运行该程序,则50将不是位于物理内存中地址50的字节;这是虚拟空间中的地址。
然后你的进程(程序)只能访问该虚拟空间中非常有限的范围,而这个空间不太可能来自50;在这种情况下,操作系统会保护非法访问并停止您的进程(段错误);无论如何,你甚至可以得到一个可能是也可能不是正确的结果,这称为未定义的行为,你最好不要依赖于一个明显有效的可执行文件。
要直接访问物理内存,您需要构建内核模块,或者从类似DOS的操作系统启动。
main.c:6:7:警告:赋值从整数中生成指针而没有强制转换[-Wint-conversion]
这就是说,你需要将50
作为int *
来清除警告。
b = (int *)50;