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

请问一个野指针的有关问题

2013-09-06 
请教一个野指针的问题。#include iostreamusing namespace stdint main (){int *pInt new int*pInt

请教一个野指针的问题。


#include <iostream>
using namespace std;
int main ()
{
int *pInt = new int;
*pInt = 10;
cout<<pInt<<endl;
cout << "pInt:" << *pInt << endl;
delete pInt ;
        // pInt=NULL;  
long *pLong = new long;
*pLong = 90000;
cout<<pLong<<endl;
cout << "*pLong:" << *pLong << endl;
*pInt = 20;
cout << "pInt:" << *pInt <<endl;
cout << "*pLong:" << *pLong << endl;
delete pLong;
return 0;
}

我想请问为什么,第一次pInt分配的内存地址,和第二次pLong分配的内存地址是一样的?难道编译器在delete一块内存以后,接下来分配内存的时候,首先将上一次释放的内存分配给这一次申请的指针?我以为应该是随机分配吧? 野指针
[解决办法]
别相信百度,维基百科靠谱。LZ,其实我是认为是随机分配的,但不知道这个随机是每次开机不同还是开了机的每次分配不同
[解决办法]
引用:
Quote: 引用:

别相信百度,维基百科靠谱。LZ,其实我是认为是随机分配的,但不知道这个随机是每次开机不同还是开了机的每次分配不同
其实我也觉得是随机分配。。不可能固定死。如果这样说,出现野指针崩溃也是少数情况下了?因为随机分配不会那么巧都分配同一个内存吧。不过我第一次运行就是同一个内存是不是有点太巧了?
这东西肯定教程里都说的不推荐使用或者不应该使用,没说一定不可以使用吧,不过等到崩溃的那个时候就晚了,所以还是别弄野指针的为好
[解决办法]
多次分配得到相同的内存地址完全是正常的, 这是因为系统内存管理导致的. 也是为了更快的速度吧.

因为系统都会有缓存, 会把最近动作缓存起来, 以加快速度. 当内存管理系统发现同一个程序多次连续申请相同大小的内存, 而这个内存又正好没有被其它程序使用, 就又把这块内存分配给你了, 不用每次都去查找当前剩余内存, 然后找一块大小适合的给你.

如果你把申请的大小每次都随机, 估计就会看到地址不同了.  或者为了比较, 你可以规律的申请大小不同的内存, 然后看在两次相同内存的时候, 地址还是否相同.

热点排行