我手残了,#include怎么可能,哎,是#define
要求判断代码是否有错,如果有错,问题在那里
最原始代码如下:
#define ARRAY_SIZE 10
int array[ARRAY_SIZE];
int *ptr;
for(ptr = &array[0];ptr<&array[10];){
*++ptr = 0;
原题的结果暂时就不讨论了,我略微改动了下代码,暴露点问题本质,然后说说代码的运行效果。
改动后代码如下:
int main()
{
int array[10];
int *ptr;
int count = 0;
for(ptr = &array[0];ptr<&array[10];){
count++;
*++ptr = 0;
}
cout<<&array[0]<<endl;
cout<<&array[8]<<endl;
cout<<&array[10]<<endl;
cout<<&count<<'\t'<<count;
}
其结果是:
0x28fe70
0x28fe90
0x28fe98
0x28fe98 0
其错误在于循环体内部根本就没有运行?
不,越界覆盖了。我自己把自己给耍了……
for(ptr = &array[0];ptr<&array[10];++ptr){
count++;
//*++ptr = 0;
}
结果如下: 0x28fe70
0x28fe90
0x28fe98
0x28fe98 10
给自己做个提醒: 栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。