Почему некоторые элементы массива, находящиеся за пределами границ, в C ведут себя иначе, чем другие? [дубликат]Linux

Anonymous
Почему некоторые элементы массива, находящиеся за пределами границ, в C ведут себя иначе, чем другие? [дубликат]

Сообщение Anonymous »

При попытке распечатать адреса и значения элемента массива, который не покрыт индексом массива, почему некоторые элементы возвращают:
  • (nil) указатель
  • Адрес других элементов массива
  • Случайные адреса (я предполагаю, что это адреса физической памяти)
Моя программа:

Код: Выделить всё

#include 

int main(){
int arr[5];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
printf("%d\t-\t%p\n", arr[0], arr[0]);
printf("%d\t-\t%p\n", arr[1], arr[1]);
printf("%d\t-\t%p\n", arr[2], arr[2]);
printf("%d\t-\t%p\n", arr[3], arr[3]);
printf("%d\t-\t%p\n", arr[4], arr[4]);
printf("%d\t-\t%p\n", arr[5], arr[5]);
printf("%d\t-\t%p\n", arr[6], arr[6]);
printf("%d\t-\t%p\n", arr[7], arr[7]);
printf("%d\t-\t%p\n", arr[8], arr[8]);
printf("%d\t-\t%p\n", arr[9], arr[9]);
printf("%d\t-\t%p\n", arr[10], arr[10]);
printf("%d\t-\t%p\n", arr[11], arr[11]);
}
Мой результат:

Код: Выделить всё

1   -   0x1
2   -   0x2
3   -   0x3
4   -   0x4
5   -   0x5
0   -   (nil)           // (nil is printed here)
1367157456  -   0x517d2ad0  // (random address and value)
32628   -   0x7f74          // (random address and value, which should have been adjacent, I think)
1   -   0x1         // (address and value of other element in array)
0   -   (nil)           // (here too, nil is printed)
1365029450  -   0x515cb24a
32628   -   0x7f74

[*]Скомпилировано с помощью gcc [gcc ./temp.c]
[*]x86 64-разрядная машина Linux.


Подробнее здесь: https://stackoverflow.com/questions/792 ... thers-in-c

Вернуться в «Linux»