欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C程序中可怕的野指針圖文詳解

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

一、疑問點(diǎn)

指針是C語言一個(gè)很強(qiáng)大的功能,同時(shí)也是很容易讓人犯錯(cuò)的一個(gè)功能,用錯(cuò)了指針,輕者只是報(bào)個(gè)錯(cuò),重者可能整個(gè)系統(tǒng)都崩潰了。下面是大家在編寫C程序時(shí),經(jīng)常遇到的一種錯(cuò)誤的使用方法,也許在你的學(xué)習(xí)和工作中就是這樣用的,很危險(xiǎn)。

實(shí)例程序如圖1所示:

圖1 實(shí)例程序

這段程序比較簡單,str1指向的內(nèi)存區(qū)域存放了一個(gè)字符串“123”,把“123”賦值到str2指向的內(nèi)存區(qū)域,編譯時(shí)會(huì)給出一個(gè)告警:

local variable 'str2' used without having been initialized

意思是說,“str2”這個(gè)變量沒有初始化。我們可以不理會(huì)這個(gè)告警,并且繼續(xù)運(yùn)行程

序,但是“str2”在定義時(shí)沒有給初值,是一個(gè)野指針,程序運(yùn)行的結(jié)果可能是非常可怕的。下面我們來詳細(xì)分析下,野指針的可怕之處。

二、可怕的野指針

我們程序中的

strcpy(str2 , str1);
printf("str2指向的字符串是 %s",str2);

這兩行代碼注釋掉,然后運(yùn)行程序,看看str2輸出的值是多少。

運(yùn)行結(jié)果如下:

可見str2被系統(tǒng)賦予一個(gè)值3435973836,3435973836是一個(gè)內(nèi)存的地址,也就是指針str2指向這段內(nèi)存,這段內(nèi)存上保存的數(shù)據(jù)可能是其他某個(gè)程序的數(shù)據(jù),例如保存著“hello world!”,如圖2所示,也可能什么數(shù)據(jù)也沒有。

圖2 其他程序的重要數(shù)據(jù)

如果這段內(nèi)存保存著其他程序的重要數(shù)據(jù),通過strcopy函數(shù)將“123”復(fù)制給了這段內(nèi)存,也就是修改了這個(gè)重要數(shù)據(jù),這段內(nèi)存保存的數(shù)據(jù)變成了“123lo world!”,如圖3所示,那么其他程序可能就崩掉了!

圖3 其他程序的重要數(shù)據(jù)被改寫

三、避免野指針的方法

為了防止野指針帶來的災(zāi)難,建議指針在定義時(shí)給一個(gè)初值,比如“NULL”,意思是不指向任何內(nèi)存地址。然后再使用malloc函數(shù)給指針分配一塊存儲(chǔ)空間。修改的程序如圖4所示:

圖4 避免野指針的改法程序

在定義str2時(shí)賦予初值“NULL”,這樣str2就不會(huì)指向任何內(nèi)存。再通過malloc函數(shù),申請(qǐng)一段空的內(nèi)存區(qū)域,也就是沒有任何程序使用的內(nèi)存區(qū)域,讓str2指向這段空的內(nèi)存區(qū)域,如圖5所示,此時(shí)再把“123”賦值到這段空的內(nèi)存區(qū)域,這樣就安全了。程序的最后,再主動(dòng)釋放掉這段內(nèi)存區(qū)域,讓str2再次不指向任何區(qū)域。

圖5 系統(tǒng)分配的內(nèi)存區(qū)域

運(yùn)行結(jié)果如圖6所示:

圖6 運(yùn)行結(jié)果

由結(jié)果可見,系統(tǒng)分配的沒有任何其他程序使用的內(nèi)存地址是“2428680”。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。

上一篇:Qt學(xué)習(xí)筆記之QPalette調(diào)色板類

欄    目:C語言

下一篇:Redis的新特性懶惰刪除Lazy Free詳解

本文標(biāo)題:C程序中可怕的野指針圖文詳解

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/249.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有