一个死循环
代码:
#include <iostream>
using namespace std;
int main()
{
int i, arr[10];
cout<<"i:"<<&i<<endl<<"arr[0]:"<<&arr[0]<<endl<<"arr[9]:"<<&arr[9]<<endl<<"arr[10]:"<<&arr[10]<<endl;
for (i = 0; i <= 10; i++)
{
arr[i]=0;
cout<<i<<endl;
}
return 0;
}
效果:
原因:
使用g++编译,会出现死循环,原因是变量创建时,从高地址往低地址创建,所以在创建变量i和数组arr的时候,i实际上创建在了a[10]的位置,将a[i]置0,在运行到a[10]=0;的时候,就相当于把i置0,于是出现死循环
在堆上分配的话不会出现这个问题:
代码:
#include <iostream>
using namespace std;
int main()
{
int *arr=new int [10];
int *i=new int;
cout<<"i:"<<i<<endl<<"arr[0]:"<<&arr[0]<<endl<<"arr[9]:"<<&arr[9]<<endl<<"arr[10]:"<<&arr[10]<<endl;
for (*i = 0; *i <= 10; (*i)++)
{
arr[*i]=0;
cout<<*i<<endl;
}
return 0;
}
效果: