如何为C中的某个内存位置分配新值

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

我正在尝试访问(char * addr)指向的内存位置并存储新值(char val)。这是我尝试这样做的方式。

int set_new_val(Cmd *cp, char *arguments) {
  char *addr;
  int val;
  if (!sscanf(arguments, "%x %x",&addr,&val))
  {
    return 0;          
  }
  printf("adr = %x || val = %x\n",addr,val);
  *addr = (char)val;
  printf("adr = %x || val = %x\n",addr,*addr);
  return 1;
}

任何明显(或不那么)的原因,为什么这不起作用,这是值得赞赏的。

c pointers memory
2个回答
1
投票

如果char*int的大小相同,您的代码可能会按预期工作,就像在32位模式下一样,但在大多数现代64位环境中都不行。

您将在现代操作系统(Windows,Linux,OS / X,iOS,Android ...)中遇到的另一个问题是内存保护:您只需要处理其自己的数据。它不能以这种方式将值戳到内存中的任何位置。使用适当的执行权限和mmap函数可以实现对任意内存位置的写入,但它似乎远远超出了您当前的技能水平。


1
投票

在为其分配值之前,首先需要为addr分配内存:

addr = malloc(sizeof(val));
*addr = (char)val;
© www.soinside.com 2019 - 2024. All rights reserved.