deitel'in kitabında mı böyle bir örnek var? örnek oldukça sıkıntılı, zira short int ve int'in bellekte tutacağı yer miktarı platforma göre değişir. short her zaman 2 int her zaman 4 byte tutar diye bir kural yok. örneği okulda hoca verdiyse short ve intin aynı miktarda yer tutacağını sandığından olabilir. ya da dev-c++ gibi bozuk compilerlarla çalışıyordur.
taşma şu şekilde:
iki tane short deklare ettin, short 2 byte ise toplamda 4 byte bellek var stackte. ilk scanf ile bir int alıyorsun, bunu ilk short gözüne koymaya çalışınca, 4 byte olan int ilk shorttan taşıp ikinciye yayılıyor. 02 yerine 0002 gibi(aslında byte dizilimi ters olduğundan 0020). sonra ikinci scanf ile ikinci shortun gözüne bir int yazıyorsun, o da eldeki gözleri şu hale çeviriyor: 0008|00 (yine byte dizilimi ters olduğundan 8 içeride kaldı)
bu şekilde ikinci short da taştı ve 2 bytelık ilgisiz bir belleği de işgal etti. sonuçta elde 0 + 8 oldu. işteyim o yüzden kaba bir anlatım oldu, üzgünüm.
not: sonradan hesap ettim byte order hesabı bunu kurtarmadı ama eğer bellekte y xten önce geliyorsa x y'yi temizlemiş olabilir. ilk kodun her zaman aynı sonucu vereceğinin garantisi yok.
0