天天看點

野指針的成因_C語言

//野指針的形成

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()

{

    //野指針的成因一:指針未初始化

    //定義變量,最好給它初始化

    int a;//局部變量不初始化,預設值為随機值

    int *p;//局部的指針變量不初始化,預設值為随機值

    *p = 20;

    return 0;

}

    //野指針的成因二:指針越界通路

    int arr[10] = { 0 };

    int *p = arr;

    for (int i = 0; i < 11; i++)

    {

        *(p++) = 1;

    }

    //野指針的成因三:指針指向的空間釋放

    int *test()

    {

        int a = 10;

        return &a;//傳回值,函數空間被釋放

    }

    int main()

    {

        int *p = test();

        *p = 20;//再想要找到,已經無法找到

        return 0;

    }

//a空間已經不屬于目前程式

舉個例子:

你來到一家飯店想居住一晚,第二天,告訴你朋友可以來到這個房間居住,但是你第二天把這個房間給退了,你兄弟來了之後,死活都要住進這個房間,這個是非法操作

繼續閱讀