真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

小心C語言野指針

本博客C語言文章合集

創(chuàng)新互聯(lián)建站專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,成都IDC機(jī)房托管,成都IDC機(jī)房托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。

指針是C語言一個很強(qiáng)大的功能。然而所謂成也蕭何,敗也蕭何,用好了指針會使程序大放異彩,用錯了指針輕者只是報個錯,重者可能整個系統(tǒng)都崩潰了。本篇我們來談?wù)勚羔樢环N錯誤的使用方法”野指針“。
野指針一般是指定義時沒有給初值的指針變量。來看以下程序:
#include
#include

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

return 0;
}

這段程序定義了一個指向字符的指針source2,但是沒有給它一個初始值。下面的代碼就是將字符串”abc“復(fù)制到source2中,編譯的結(jié)果如下:
--------------------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沒有初值就被使用了。你可以無視這個告警,并且運(yùn)行程序,但是運(yùn)行的結(jié)果可能是災(zāi)難性的。

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

source2的值是:3435973836
Press any key to continue

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

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時分配一段內(nèi)存空間,不用source2時釋放內(nèi)存空間,并且重新賦值NULL。


網(wǎng)頁名稱:小心C語言野指針
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ggdpsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部