Witam, mam następujące pytanie debug'uje obie programą w C++ pod Visual Studio tak, żeby ogarnać jak to wszystko pracuje i mam następujące pytanie:
kod testowy:
#include <iostream>
using namespace std;
int main(){
char tablica1[10] = {};
char tablica2[10] = {};
cout << sizeof(char) << endl;
cin >> tablica1;
cout << tablica1 << endl;
cin >> tablica2;
cout << tablica2 << endl;
return 0;
}
W pamięci zmienne są obok siebie natomiast nurtuje mnie to czemu pomiędzy nimi jest "przerwa" 10 bajtowa.
Np.
tablica1 ma adres 0x0038f77c (początek)
tablica1 ma adres 0x0038f768 (początek)
różnica 20 bajtów - 10 na dane w tablicy = 10 bajtów odstępu i tak jest za każdym razem po ponownym odpaleniu programu (adresy się oczywiście zmieniją, ale różnica pomiędzy adresami zawsze wynosi 20 bajtów)
Czy to z czegoś wynika, że jest to miejsce? Tam oczywiście są jakieś śmieci.
Pytam z ciekawości. Zrobiłem sobie przepełnienie bufora, żeby nadpisać dane w tablicy1 i do tablicy2 wpisałem tekst dłuższy niż jej rozmiar i pod debuggerem widać, że dopiero 21 znak nadpisuje pierwszy element tablicy1. (głównie chodzi mi tu to to czy zmienne nie są na stosie wstawiane zaraz po sobie, kończy się zakres pierwszej zmiennej to zaraz po niej zaczyna się druga itd.).
System 64 bit Win7.
Mam nadzieję, że nie zamotałem za mocno :D.