1.破坏计数
int main(){
int i;
int array[4];
for(i=0; i<=4; i++){
array[i] = 0;
}
return 0;
}
堆栈中:
- | sava pc
- | i (即array 4)
- | array 3
- | array 2
- | array 1
- | array 0
当i
到达4
时,array[4]=0
会将i置换为0,所以会无限迭代
2.重置返回地址
int foo(){
int array[4];
int i;
for(i=0; i<=4; i++){
array[i] -= 4;
}
return 0;
}
堆栈中:
| save pc (即array + 4)
| array + 3
| array + 2
| array + 1
| array + 0
| i
每次迭代的array + 4
,即save pc处,将返回地址减4,又会再次调用此函数,从而无限迭代
3.重用堆栈
int main(){
newIntArray();
printArray();
return 0;
}
void newIntArray(){
int array[100];
for(int i = 0; i < 100; i++)
array[i] = i;
}
void printArray(){
int array[100];
for(int i = 0; i < 100; i++)
print("%d,", array[i]);
}
输出结果:1,2,3,4,5,6,7, ...........100,
堆栈中:
| save pc
| array 99
| array 98
| array 97
| ..........
| array 1
| array 0
即newIntArray()在堆栈中创建数据后,printArray()又一次重新使用同一堆栈