请问一个野指针的有关问题
请教一个野指针的问题。#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,其实我是认为是随机分配的,但不知道这个随机是每次开机不同还是开了机的每次分配不同
[解决办法]这东西肯定教程里都说的不推荐使用或者不应该使用,没说一定不可以使用吧,不过等到崩溃的那个时候就晚了,所以还是别弄野指针的为好
[解决办法]多次分配得到相同的内存地址完全是正常的, 这是因为系统内存管理导致的. 也是为了更快的速度吧.
因为系统都会有缓存, 会把最近动作缓存起来, 以加快速度. 当内存管理系统发现同一个程序多次连续申请相同大小的内存, 而这个内存又正好没有被其它程序使用, 就又把这块内存分配给你了, 不用每次都去查找当前剩余内存, 然后找一块大小适合的给你.
如果你把申请的大小每次都随机, 估计就会看到地址不同了. 或者为了比较, 你可以规律的申请大小不同的内存, 然后看在两次相同内存的时候, 地址还是否相同.