How to read/write type values from “raw” memory in C?

天大地大妈咪最大 提交于 2019-12-08 17:40:31

问题


How do I make something like this work?

void *memory = malloc(1000);  //allocate a pool of memory
*(memory+10) = 1;  //set an integer value at byte 10
int i = *(memory+10);  //read an integer value from the 10th byte

回答1:


Easy example: treat the memory as an array of unsigned char

void *memory = malloc(1000);  //allocate a pool of memory
uint8_t *ptr = memory+10;  
*ptr = 1 //set an integer value at byte 10
uint8_t i = *ptr;  //read an integer value from the 10th byte

You can use integers too, but then you must pay attention about the amount of bytes you are setting at once.




回答2:


The rules are simple:

  • every pointer type (except function pointers) can be cast to and from void*, without loss.
  • you cannot perform pointer arithmetic on void* pointers, and cannot dereference them
  • sizeof(char) equals 1, by definition; so incrementing a char pointer means "adding 1" to the "raw" pointer value

From this you can conclude that if you want to perform "raw" pointer arithmetic you have to cast to and from char*.




回答3:


So, by "work" I assume you mean "how do I dereference/perform pointer arithmetic on a void*"? You can't; you have to cast it, typically to a char* if you're just concerned with reading chunks of memory. Of course, if that's the case, simply declare it as a char* to begin with.



来源:https://stackoverflow.com/questions/11490984/how-to-read-write-type-values-from-raw-memory-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!