GCC错误,错误的代码或gcc是很好的编译器

问题描述 投票:-4回答:1

我有这个代码:

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字节的内存值。

我的代码是正确的还是编译器可以正常工作。

c pointers memory-management
1个回答
1
投票

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

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

要直接访问物理内存,您需要构建内核模块,或者从类似DOS的操作系统启动。

main.c:6:7:警告:赋值从整数中生成指针而没有强制转换[-Wint-conversion]

这就是说,你需要将50作为int *来清除警告。

b = (int *)50;
© www.soinside.com 2019 - 2024. All rights reserved.