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:
- what happen if declare array of length zero?
- 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
Post a Comment