【C語言干貨】野指針

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、什么是野指針?
  • 二、野指針的三大成因
    • 1.指針未初始化
    • 2.指針越界訪問
    • 2.指針指向已釋放的內存


前言


提示:以下是本篇文章正文內容,下面案例可供參考

一、什么是野指針?

野指針是指向"無效內存區域"的指針。這些指針可能指向:

  • 已經釋放的內存

  • 未初始化的隨機地址

  • 超出合法范圍的地址

使用野指針就像在現實生活中使用一個錯誤的地址去寄信——你無法預測信會送到哪里,甚至可能造成嚴重的后果。

二、野指針的三大成因

1.指針未初始化

問題代碼

c

復制

下載

#include <stdio.h>int main() {int *p;  // 未初始化的局部指針變量,值是隨機的*p = 10; // 向未知內存寫入數據,危險!return 0;
}

分析

  • 局部變量未初始化時,其值是隨機的(棧上的垃圾值)

  • 這個隨機值被當作內存地址使用

  • 對該地址的讀寫操作可能導致段錯誤(Segmentation Fault)或悄無聲息地破壞其他數據

2.指針越界訪問

#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int *p = arr;for(int i = 0; i <= 5; i++) {  // 故意越界*(p++) = i * 10;}return 0;
}

分析

  • 數組arr只有5個元素,有效索引是0-4

  • 循環訪問了arr[5],這已經越界

  • 越界后p指向的內存可能屬于其他變量或不可訪問區域

  • 可能破壞棧上的其他數據(如返回地址),導致程序異常

3. 指針指向已釋放的內存

#include <stdio.h>
#include <stdlib.h>int *create_array(int size) {int *arr = (int *)malloc(size * sizeof(int));for(int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int *my_array = create_array(5);free(my_array);  // 內存已釋放// 錯誤:使用已釋放的內存printf("%d\n", my_array[2]);  return 0;
}

分析

  • free()釋放了my_array指向的內存

  • 但my_array的值(地址)并未改變

  • 繼續使用這個指針就是訪問已釋放的內存

  • 可能導致數據混亂、程序崩潰或安全漏洞


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79896.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79896.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79896.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity:Surface Effector 2D(表面效應器 2D)

目錄 什么是表面效應器 2D&#xff1f; &#x1f3af; 它是做什么的&#xff1f; &#x1f9ea; 從第一性原理解釋它是怎么工作的 &#x1f4e6; 重要參數解釋 為什么不直接用 Rigidbody&#xff08;剛體&#xff09;來控制運動 &#xff1f; 所以什么時候該用哪個&#…

android 記錄應用內存

windows cmd下 30s 記錄一次 echo off setlocal enabledelayedexpansion set /a counter0 :loop echo %date% %time% >> meminfo.txt adb shell dumpsys meminfo packagename>> meminfo.txt timeout /t 30 /nobreak >nul set /a counter1 echo counter: !coun…

基于神經網絡的 YOLOv8、MobileNet、HigherHRNet 姿態檢測比較研究

摘要 隨著人工智能技術的飛速發展&#xff0c;基于神經網絡的姿態檢測技術在計算機視覺領域取得了顯著進展。本文旨在深入比較分析當前主流的姿態檢測模型&#xff0c;即 YOLOv8、MobileNet 和 HigherHRNet&#xff0c;從模型架構、性能表現、應用場景等多維度展開研究。通過詳…

解決HomeAssistant 無法安裝 samba share問題

最近家里樹莓派上的homeassistant 被折騰崩了&#xff0c;重新安裝過程中發現加載項“Official add-ons”里面的“samba share”、“file edit”、“Mosquitto broker”等常用組件都不能安裝。報以下錯誤&#xff1a; [supervisor.docker.interface] Cant install homeassista…

[Linux]從零開始的STM32MP157 Buildroot根文件系統構建

一、前言 在前面的教程中&#xff0c;教了大家如何移植一個LInux的內核并且正確啟動&#xff0c;我們發現Linux內核在啟動后會出現一個錯誤&#xff0c;提示我們沒有找到根文件系統。那么什么是根文件系統呢&#xff1f;之前我們使用Ubuntu編譯了STM32MP157的TF-A,UBOOT,LINUX內…

2025-05-07 學習記錄--Python-變量 + 常量 + 命名規則 + 變量的數據類型 + 數據類型

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、變量 ?? 多個變量的賦值 &#x1f36d; 二、常量 ?? 程序在運行的過程中&#xff0c;值永遠不會發生改變的量稱之為常量…

16.狀態模式:思考與解讀

原文地址:狀態模式&#xff1a;思考與解讀 更多內容請關注&#xff1a;深入思考與解讀設計模式 引言 在開發軟件系統時&#xff0c;特別是當對象的行為會隨著狀態的變化而變化時&#xff0c;系統往往會變得復雜。你是否遇到過這樣的情況&#xff1a;一個對象的行為在不同的狀…

從 Pretrain 到 Fine-tuning:大模型遷移學習的核心原理剖析

引言 在人工智能領域&#xff0c;大模型的出現掀起了一場技術革命。這些擁有海量參數的模型&#xff0c;如 GPT-4、PaLM 等&#xff0c;在眾多任務上展現出了驚人的能力。然而&#xff0c;訓練一個大模型需要耗費巨大的計算資源和時間&#xff0c;而且直接讓大模型處理特定領域…

Java詳解LeetCode 熱題 100(11):LeetCode 239. 滑動窗口最大值(Sliding Window Maximum)詳解

文章目錄 1. 題目描述2. 理解題目3. 解法一&#xff1a;暴力法3.1 思路3.2 Java代碼實現3.3 代碼詳解3.4 復雜度分析3.5 適用場景 4. 解法二&#xff1a;優先隊列&#xff08;最大堆&#xff09;4.1 思路4.2 Java代碼實現4.3 代碼詳解4.4 復雜度分析4.5 適用場景 5. 解法三&…

org.apache.poi——將 office的各種類型文件(word等文件類型)轉為 pdf

org.apache.poi——將 office的各種類型文件&#xff08;word等文件類型&#xff09;轉為 pdf 簡介使用方法word轉pdf 使用示例word轉pdf 簡介 使用方法 word轉pdf Maven坐標為 <dependency><groupId>com.documents4j</groupId><artifactId>documen…

二叉樹與優先級隊列

1.樹 樹是由n個數據構成的非線性結構&#xff0c;它是根朝上&#xff0c;葉朝下。 注意&#xff1a;樹形結構之中&#xff0c;子樹之間不能連接&#xff0c;不然就不構成樹形結構 1.子樹之間沒有交集 2.除了根節點以外&#xff0c;每一個節點有且只有一個父親節點 3.一個n個…

如何進行室內VR全景拍攝?

如何進行室內VR全景拍攝&#xff1f; 室內VR全景拍攝作為先進的視覺技術&#xff0c;能夠為用戶提供沉浸式的空間體驗。本文介紹如何進行室內VR全景拍攝&#xff0c;并闡述眾趣科技在這一領域的技術支持和服務優勢。 室內VR全景拍攝基礎 1. 室內VR全景拍攝概述 室內VR全景拍…

如何通過代理 IP 實現異地直播推流

在直播行業日益火爆的今天&#xff0c;許多主播希望突破地域限制&#xff0c;實現異地直播推流&#xff0c;以獲得更廣泛的觀眾群體和更好的直播效果。代理 IP 作為一種有效的網絡工具&#xff0c;能夠幫助主播輕松達成這一目標。本文將詳細介紹如何通過代理 IP 實現異地直播推…

隨機變量數字特征

主要介紹一維隨機變量期望和方差、二維隨機變量期望和方差、以及協方差相關公式&#xff0c;及推導。 一維隨機變量 以一個拋硬幣的場景作為例子&#xff0c;如下&#xff1a; 拋擲兩枚均勻硬幣&#xff0c;如果兩枚都是正面向上&#xff0c;則贏得2元&#xff0c;否則就輸掉…

上傳圖片后,如何調用API進行商品搜索?

以下是一個完整的示例&#xff0c;展示如何在上傳圖片后調用淘寶按圖搜索商品&#xff08;拍立淘&#xff09;API進行商品搜索&#xff1a; 1. 準備工作 注冊賬號并獲取API密鑰&#xff1a;在淘寶開放平臺注冊賬號&#xff0c;創建應用&#xff0c;獲取app_key和app_secret。 …

Android 數據持久化之 Room 數據庫存儲

一、簡介 Room 是 Google 推出的 Android 持久層框架,建立在 SQLite 之上,提供了一個抽象層,簡化了數據庫操作。它通過注解和編譯時檢查來確保數據操作的正確性。 Room 主要由以下三個組件組成: Entity(實體):定義封裝實際數據的實體類,每個實體類對應數據庫中的一個…

react中的用法——setDisabled dva dispatch effects

setDisabled 在react中&#xff0c;setDisabled通常是指通過狀態管理來控制某個組件&#xff08;如按鈕、輸入框等&#xff09;的禁用狀態。雖然react本身沒有內置的setDisabled方法&#xff0c;但你可以使用useState鉤子來實現類似的功能。以下是一個簡單的示例&#xff0c;展…

html css js網頁制作成品——HTML+CSS珠海網頁設計網頁設計(4頁)附源碼

目錄 一、&#x1f468;?&#x1f393;網站題目 二、??網站描述 三、&#x1f4da;網站介紹 四、&#x1f310;網站效果 五、&#x1fa93; 代碼實現 &#x1f9f1;HTML 六、&#x1f947; 如何讓學習不再盲目 七、&#x1f381;更多干貨 一、&#x1f468;?&#x1f…

C語言復習筆記--自定義類型

今天我們來復習一下自定義類型.自定義類型大概分為結構體,枚舉,聯合體,數組這幾種.數組在之前就介紹過.今天我們來看下其他三種. 結構體 首先來看結構體. 結構體類型的聲明 之前在操作符的地方簡單認識過結構體.下面我們回顧一下. 結構體回顧 結構是?些值的集合&#xff0c;這…

python jupyter notebook

什么是Jupyter Notebook Jupyter Notebook是一個開源的Web應用程序&#xff0c;允許用戶創建和共享包含實時代碼、方程、可視化和解釋性文本的文檔。它最初由IPython團隊開發&#xff0c;現在已經成為一個獨立的項目&#xff0c;并廣泛用于數據清理和轉換、數值模擬、統計建模…