为什么指针越界操作可以得到正确结果!迷惑!
今天想玩一下指针越界,看看有啥后果!~结果让我很迷茫
程序如下:
#include "stdio.h "
int main()
{
static int test[100];
int* pointer;
pointer = test;
int i;
for(i=0;i <100;i++)
{
test[i] = i;
}
pointer += 40;
printf( "*pointer is %d.\n ",*pointer);
printf( "pointer[-10] is %d.\n ",pointer[-10]);
pointer[-10] = 111;
pointer[-50] = 222;
printf( "pointer[-10] is %d.\n ",pointer[-10]);
printf( "pointer[-50] is %d.\n ",pointer[-50]);
return 1;
}
为什么我对pointer[-50]赋值可以成功?并且还可以正确的读到赋值的结果!
[解决办法]
程序不提供数组越界保护,
你可以越界访问,
程序本身不理会。
但是如果越界时候,
访问了非法的内存空间,
那么程序就 Over 了 ~~
所以说,
越界本身可以,
但是始终,它是个问题!
[解决办法]
jixingzhong(瞌睡虫星辰) 说的合理。。
本身程序没发保证你是否越界访问。。。 注:如果你读取的是越界内存的值,程序立马嘎本挂掉。
此时你越界赋值刚好是有效的内存地址。所以虽然你的指针已经指向了数组外,但仍可以赋值,只是篡改了其他地方用的内存而已(也相当的危险)。建议只是玩玩。