内存操作分析(野指针)

第一点:1.什么是野指针,指针变量中的值是非法的内存地址,进而造成野指针。

2.野指针不是空指针,是指向不可用内存地址的指针。

3.NULL指针并没有害处,很好判断,也很好调试。

4.C语言中无法判断一个指针所保存的地址值是否合法。

第二点:野指针的由来

1.局部指针变量没有被初始化

2.指针所指向的变量在指针指向之前被销毁(例如:返回局部变量,局部数组的地址)

3.使用已经释放过的指针(动态内存分配)

4.进行了错误的指针运算

5.进行了错误的强制类型转化

#include <stdio.h>
#include <malloc.h>


int main()
{
    int* p1 = (int*)malloc(40);
    int* p2 = (int*)1234567; //进行了错误的强制类型转化
    int i = 0;
    
    for(i=0; i<40; i++)
    {
        *(p1 + i) = 40 - i;//进行了错误的指针运算,循环变量不应该是40而是10
    }

    free(p1); 
    
    for(i=0; i<40; i++)
    {
        p1[i] = p2[i];   //使用已经释放过的指针
    }
    
    return 0;
}

 

posted @ 2019-09-20 20:08  repinkply  阅读(26)  评论(0)    收藏  举报