pointers - Array address in c++ -


i have code :

int n; cin >> n; int array[n];  (int = 0; < n; ++i) {     cin >> array[i];   }  int tmp[n - 1]; tmp[0] = 1; 

with input : 1 10 found value of array[0] changed , instead of 10 has same tmp[0].

then realized input length of tmp[] became zero. print address of array[] , tmp[] with:

printf("%d\n %d\n", array, tmp); 

and found had same address.

i want figure out happen if array has length of 0; tried this:

int array[1]; array[0] = 10;  int tmp[0]; tmp[0] = 1; 

address:

array[]: 1363909056 tmp[]  : 1363909052 

it looks previous code (except input part). tmp[0] , array[0] has different values , address now.

and i'm confused tmp has smaller address array.

so question is:

  1. what happen if declare array of length zero?
  2. why these 2 codes works different? (they same me :) )

this called "undefined behavior". after declaring, in case

int tmp[0]; 

the next thing happens is:

tmp[0]=1; 

since tmp[0] not exist, undefined behavior. problem not array declared size 0 (that's not kosher on own merits, not issue here), undefined behavior result of overwriting memory past end of array.


Comments

Popular posts from this blog

wordpress - (T_ENDFOREACH) php error -

Export Excel workseet into txt file using vba - (text and numbers with formulas) -

Using django-mptt to get only the categories that have items -