在 6/23/21 6:32 PM, Erick Ochoa via Gcc 写道:

I notice that in these special cases, the printf function is nowhere
to be found, and if one prints a pointer using printf the pointer
points to escaped memory.

Why is this the case?


I think it is due to the incapability of ruling out the possibility of code that attempts to read the pointer back and modifies the pointee, like follows:


  ```c
  #include <stdio.h>

  int main(void)
    {
      static char buf[200];
      setvbuf(stdout, buf, _IOFBF, sizeof(buf));

      int value = 42;
      printf("%p\n", (void*)&value);

      void* ptr = 0;
      if(sscanf(buf, "%p", &ptr))
        *(int*)ptr = 100;

      fprintf(stderr, "value = %d\n", value);  // 100 instead of 42
    }
  ```


--
Best regards,
Liu Hao

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to