91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C程序中指針的示例分析

發布時間:2021-08-25 09:26:17 來源:億速云 閱讀:139 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“C程序中指針的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C程序中指針的示例分析”這篇文章吧。

一、疑問點

指針是C語言一個很強大的功能,同時也是很容易讓人犯錯的一個功能,用錯了指針,輕者只是報個錯,重者可能整個系統都崩潰了。下面是大家在編寫C程序時,經常遇到的一種錯誤的使用方法,也許在你的學習和工作中就是這樣用的,很危險。

實例程序如圖1所示:

C程序中指針的示例分析

圖1 實例程序

這段程序比較簡單,str1指向的內存區域存放了一個字符串“123”,把“123”賦值到str2指向的內存區域,編譯時會給出一個告警:

local variable 'str2' used without having been initialized

意思是說,“str2”這個變量沒有初始化。我們可以不理會這個告警,并且繼續運行程

序,但是“str2”在定義時沒有給初值,是一個野指針,程序運行的結果可能是非常可怕的。下面我們來詳細分析下,野指針的可怕之處。

二、可怕的野指針

我們程序中的

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

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

運行結果如下:

C程序中指針的示例分析

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

C程序中指針的示例分析

圖2 其他程序的重要數據

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

C程序中指針的示例分析

圖3 其他程序的重要數據被改寫

三、避免野指針的方法

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

C程序中指針的示例分析

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

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

C程序中指針的示例分析

圖5 系統分配的內存區域

運行結果如圖6所示:

C程序中指針的示例分析

圖6 運行結果

由結果可見,系統分配的沒有任何其他程序使用的內存地址是“2428680”。

以上是“C程序中指針的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

思南县| 林甸县| 汤原县| 额敏县| 新沂市| 肃北| 大英县| 遂宁市| 获嘉县| 岢岚县| 临泽县| 萍乡市| 武清区| 祁阳县| 宁津县| 金秀| 奉化市| 门源| 金门县| 扶风县| 深泽县| 勃利县| 达拉特旗| 梅州市| 商南县| 进贤县| 环江| 宝鸡市| 蓬安县| 隆安县| 乐业县| 建平县| 云南省| 沅江市| 公安县| 阜阳市| 四子王旗| 化德县| 循化| 商水县| 迁西县|