gpt4 book ai didi

c - 下面的c逻辑有什么问题?

转载 作者:行者123 更新时间:2023-11-30 21:13:09 24 4
gpt4 key购买 nike

int main(){
char * ptr = (char *) 0x1000;
*(char *)ptr = 0; //Illegal memory access
printf("ptr %p\n", ptr); //prints the address (hex); ptr is pointing memory location 0x1000.
printf("ptr %d\n", *ptr); //illegal memory access
return 0;}

上面的代码片段在我的 linux 机器上运行
但;当在我的 32 位目标板上 ptr 是指向类型 uint32 映射寄存器地址的 volatile 指针时,可以写入该寄存器,如下所示:
*(volatile uint32*)ptr = 0x00000001;

最佳答案

我不知道您要做什么,但我假设您正在为某些微 Controller 或类似的东西编写某种固件。你的问题听起来有点像 XY 问题。

作为一种低级编程语言,C 比 Ruby 等高级语言更依赖于硬件细节。很大程度上取决于此代码在哪个处理器和哪个操作系统下运行。本质上,您是在询问代码的运行时行为,但您没有提供有关该代码运行位置的足够信息。

直接为指针赋值可能指向也可能不指向任何地方,这取决于处理器和操作系统。此外,并非所有处理器和指令集都将寄存器映射到内存空间。所以,

char * ptr = (char *) 0x1000;

要么

( volatile uint32 *)ptr = 0x00000001;

可能指向 32 位寄存器或可能指向物理内存或可能指向有效虚拟地址或可能指向无效或未映射的虚拟地址或可能只是指向无处。一切都取决于硬件环境。

关于c - 下面的c逻辑有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44228510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com