free 和delete 把指针怎么啦?

别看 free 和 delete 的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给 释放掉,但并没有把指针本身干掉。

发现指针 p 被 free 以后其地址仍然不变(非 NULL),只是 该地址对应的内存是垃圾,p 成了“野指针”。如果此时不把 p 设置为 NULL,会让人误 以为 p 是个合法的指针。

 如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之 前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用, 因为即便 p 不是 NULL 指针,它也不指向合法的内存块。

 

 1 #include <iostream>
 2 #define size 5
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5 int main(int argc, char** argv) {
 6         //声明变量
 7     int i,j;
 8     float t,a[size];
 9 
10     //从键盘上为数组赋值
11     for (i=0;i<size;i++)
12     {
13        cout<<"a["<<i<<"]=";
14        cin>>a[i];
15     }
16 
17     //对数组按从小到大顺序排序
18     for (i=0;i<size-1;i++)
19         for (j=i+1;j<size;j++)
20             if (a[i]>a[j])
21             {
22                t=a[i];
23                a[i]=a[j];
24                a[j]=t;
25             }
26 
27     //显示排序结果
28     for (i=0;i<size;i++)
29        cout<<a[i]<<" ";
30     cout<<endl;
31 
32     //输入要查找的数据
33     int value;
34     int found;   //找到为1,否则为0
35     int    low,high,mid;   
36     for (i=1;i<=3;i++) {
37         cout<<"value=";
38         cin>>value;
39     
40         //二分法查找数组a
41         found=0;
42         low=0;
43         high=size-1;
44         while(low<=high)
45         {    
46             mid=(high+low)/2;
47             if (a[mid]==value)
48             {
49             found=1;
50             break;
51             }
52             if (a[mid]<value)
53                 low=mid+1;
54             else
55                 high=mid-1;
56         }
57         if (found)
58             cout<<"The valu found at:a["<<mid<<"]="<<a[mid]<<endl;
59         else
60             cout<<"The "<<value<<" is not found!"<<endl;
61     }
62     return 0;
63 }

 

posted @ 2018-08-02 12:19  borter  阅读(167)  评论(0编辑  收藏  举报