Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

same address shows different values for const variable with g++ compiler [duplicate]

Tags:

c++

c

The following code shows different output with gcc and g++ on using const variable i. The addresses of i and value of ptr is same, but on accessing that address by printing value of i and derefrencing value of ptr I got value of i as 5 with g++ and 10 with gcc.

How g++ holds const variable in memory?

   #include <stdio.h>
   int main()
   {
     const  int i =5; 
     int *ptr =(int*)&i;
     *ptr = 10;
     printf("\n %u and %u   and %d  and %d  \n",&i,ptr,i,*ptr);

     return 0;
   }
like image 269
Rahul Gautam Avatar asked Mar 28 '26 05:03

Rahul Gautam


1 Answers

You are modifying a const qualified object. This is not allowed in C ("undefined behavior"). Anything can happen.

Examples:

  1. The compiler could put i into read-only memory. Writing to *ptr would crash your program.
  2. It could put it into writable memory and you would just see the 10.
  3. It could put it into writable memory but replace all read accesses to i by the number 5 (You promised it is const, didn't you?).

I guess the C compiler chose 2 while the C++ compiler went for 3.

like image 63
undur_gongor Avatar answered Mar 29 '26 19:03

undur_gongor



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!