首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这种属于野指针吗,该怎么解决

2012-04-05 
这种属于野指针吗C/C++ codeint main(){int*anew int[5]a[7]123couta[7]return 0}这语句在VC6是允

这种属于野指针吗

C/C++ code
int main(){    int*a=new int[5];    a[7]=123;    cout<<a[7];    return 0;}


这语句在VC6是允许编译的,且大多数运行时也不会出错,输出123
那这样的操作是不是把没有分配的部分也给修改了?
如果这部分内存被其他程序用了,这样的更改是不是很危险?

[解决办法]
越界并不一定会崩溃,但结果是未知的
[解决办法]
指针a 不属于野指针,只是访问越界。
野指针 一般是指,释放以后,没有赋值为NULL, 然后别的地方又没有判断是否为NULL 就拿来使用
[解决办法]
是越界,虽然这里可能没用运行出错,但不代表代码没问题,以后用在其他工程里就会出问题了。
[解决办法]
不属于野指针,野指针就是你不知道指针的值,指向哪?你知道a的地址,自然知道a[7]了,所以不是野指针。若单纯只写成你这个程序,不管什么系统下肯定不会报错的。因为用new申请内存,系统都是按页(好像是1k还是4k)分配内存,即使你(程序第一次申请)只申请1个字节系统也会给你1页的内存。这一页的内存你都可以随便用。但以后的new申请系统都会在这一页上分配给你,直到这一页用完,系统又会分配下一页。所以只要你访问的地址是和你申请的地址在同一页上那肯定不会报错。

热点排行