緩衝區溢出:往程序的緩衝區寫超出其長度的內容,也就是使用了申請之外的內存,會造成意想不到的結果。
來看一個很小的例子,這個例子來自這裏:http://zhan.renren.com/ilovecrack?from=template
代碼
#include<stdio.h>
void main()
{
int i=0;
int a[]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<=10;i++)
{
a[i]=0;
printf("Hello World!\n");
}
}
運行結果
分析
i=0~10,a[10]越界了,它越界到了哪裏呢?地址是從小往大增長的,沒錯,它越界到了i的地址空間。於是a[10]=0就是i=0,下次循環時,i=0,滿足循環條件,於是循環繼續進行着。每當i==10的時候,循環體裏的語句都將把i置爲0,於是循環將永無止境地進行下去。