亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小心C語言野指針

發布時間:2020-07-11 22:15:43 來源:網絡 閱讀:268 作者:kelehaier 欄目:編程語言

本博客C語言文章合集

指針是C語言一個很強大的功能。然而所謂成也蕭何,敗也蕭何,用好了指針會使程序大放異彩,用錯了指針輕者只是報個錯,重者可能整個系統都崩潰了。本篇我們來談談指針一種錯誤的使用方法”野指針“。
野指針一般是指定義時沒有給初值的指針變量。來看以下程序:
#include <stdio.h>
#include <string.h>

int main()
{
char source1 = "abc";
char
source2;
printf("source2的值是:%u\n", source2);
strcpy(source2 , source1);
printf("%s",source2);

return 0;
}

這段程序定義了一個指向字符的指針source2,但是沒有給它一個初始值。下面的代碼就是將字符串”abc“復制到source2中,編譯的結果如下:
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
demo.c
D:\CCode\Test\demo.c(8) : warning C4700: local variable 'source2' used without having been initialized
Linking...

Test.exe - 0 error(s), 1 warning(s)

編譯給出一個告警,說source2沒有初值就被使用了。你可以無視這個告警,并且運行程序,但是運行的結果可能是災難性的。

由于source2在定義時沒有給初值,程序運行時系統會默認給source2一個值,我們可以將程序中的
strcopy(source2 , source1);
printf("%s",source2);
這兩行代碼注釋掉,然后運行程序,看看source2輸出的值是多少。運行結果如下:

source2的值是:3435973836
Press any key to continue

可見source2被系統賦予一個值3435973836,而3435973836是一個內存的地址,至于是哪段內存地址,誰也不知道,可能是操作系統本身所在的內存地址,也可能是一個空的內存地址。如果是操作系統本身所在的內存地址,通過strcopy函數將”abc“復制給了這段內存地址,也就是修改了操作系統本身內存數據,你的計算機可能就崩掉了!所以指針在定義時一定要給一個初值,比如”NULL“。在本程序中,除了給source2賦初值外,還需使用malloc函數分配一塊存儲空間,使得source2指向這塊存儲空間。修改的程序如下:
#include <stdio.h>
#include <string.h>
#include<malloc.h>

int main()
{
char source1 = "abc";
char
source2 = NULL;
printf("source2的初始值是:%u\n", source2);
source2 = (char *)malloc(100);
printf("source2的分配值是:%u\n", source2);
strcpy(source2 , source1);
printf("%s",source2);

free(source2);
source2 = NULL;

return 0;
}

在定義source2時賦初值NULL,在使用source2時分配一段內存空間,不用source2時釋放內存空間,并且重新賦值NULL。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄢陵县| 繁峙县| 广饶县| 略阳县| 边坝县| 曲周县| 南川市| 凤城市| 古浪县| 遂昌县| 汉阴县| 泉州市| 福贡县| 九江市| 通海县| 仪征市| 青田县| 光泽县| 嘉禾县| 德格县| 察哈| 英吉沙县| 临泉县| 北流市| 沭阳县| 隆林| 纳雍县| 乐业县| 峡江县| 扬州市| 上高县| 苏尼特右旗| 昌都县| 寿宁县| 司法| 云安县| 莱芜市| 黔西| 大庆市| 沿河| 壶关县|