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.重用堆栈
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]);
}
}
int main()
{
newIntArray();
printArray();
return 0;
}
输出结果:1,2,3,4,5,6,7, ………..100, 在堆栈中:
| save pc
| array 99
| array 98
| array 97
| ..........
| array 1
| array 0
即newIntArray()在堆栈中创建数据后,printArray()又一次重新使用同一堆栈
- older
- Newer