Wpis z mikrobloga

Nie ma błędu, bo prawdopodobnie mieścisz się jeszcze w stronie pamięci (4kB lub 4MB). Daj znacznie większy indeks i wtedy się wywróci na plecy ;)
  • Odpowiedz
@wuut: bo to C. Jest szybkie właśnie dzięki temu, że nie robi niczego, o co wprost nie poprosisz. Tablice w C to nic innego jak arytmetyka wskaźników. Możesz pisać i czytać do dowolnego miejsca w pamięci. Co najwyżej kernel może wykryć błąd segmentacji pamięci, odmówić dostępu i ubić proces.
  • Odpowiedz
@wuut: Popatrz sobie na ten program to się sytuacja wyjaśni :)

#include
#include
int main() {
int na_stosie_0 = 123;
char* na_stosie_1[0];
// wypisuje 123 czyli zawartosc zmiennej na_stosie_0
printf("%d\n", *(int*)((void*)&na_stosie_1 + sizeof(int)));


return 0;
}
Twoja zmienna servers to tablica wskaznikow leżąca na stosie. Kazdy element tej tablicy to wskaznik typu char* o wielkości 8 bajtów (na maszynie 64 bitowej).

Pisząc servers[x] dostajesz wskaźnik x z tej tablicy w odległości
  • Odpowiedz
@wuut: kolego, dla lepszego zrozumienia, czym są tablice w C, spróbuj napisać "100[servers]" zamiast "servers[100]" i zobacz co się stanie.

  • Odpowiedz