首页 > 解决方案 > GCC 错误、错误代码或 gcc 是好的编译器

问题描述

我有这个代码:

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]
超时:受监控的命令转储核心
sh:第 1 行:47524 分段错误超时 10 秒主

我想从 50 字节的内存中打印值。

我的代码是正确的还是编译器会起作用。

标签: cpointersmemory-management

解决方案


假设您在最近的操作系统(如 Linux、Mac 或 Windows)上运行该程序,50 将不是位于物理内存中地址 50 的字节;那是虚拟空间中的地址。

那么您的进程(程序)只能访问该虚拟空间中非常有限的范围,这 50 不太可能来自 ; 在这种情况下,操作系统会保护非法访问并停止您的进程(段错误);无论如何,您甚至可以获得可能是正确的结果,也可能不是正确的结果,这称为未定义的行为,并且在这种情况下,您最好不要依赖明显工作的可执行文件。

例如,要直接访问物理内存,您要么需要构建内核模块,要么从类似 DOS 的操作系统引导。

main.c:6:7:警告:赋值使指针从整数不进行强制转换 [-Wint-conversion]

话虽如此,您需要将其转换50为 aint *以清除警告。

b = (int *)50;

推荐阅读