【C語言】常見的動態內存管理錯誤

前言

上一篇介紹了C語言中 動態內存管理函數,本片講解的是 在我們使用動態內存管理時 常見的錯誤,一起來看看吧~

歡迎關注個人主頁:逸狼


創造不易,可以點點贊嗎~

如有錯誤,歡迎指出~


目錄

1.對NULL指針的解引?操作

錯誤代碼展示

修改

2.對動態開辟空間的越界訪問

錯誤代碼展示

修改

3 .對?動態開辟內存使?free釋放

錯誤代碼展示

4 .使?free釋放?塊動態開辟內存的?部分

錯誤代碼展示

5. 對同?塊動態內存多次釋放

錯誤代碼展示

修改

6.動態開辟內存忘記釋放(內存泄漏)

錯誤代碼展示

修改?編輯


1.對NULL指針的解引?操作

錯誤代碼展示

int main()
{int* p = (int*)malloc(100);*p = 20;//p有可能是NULL指針	//釋放free(p);p = NULL;return 0;
}

修改

2.對動態開辟空間的越界訪問

錯誤代碼展示

int main()
{int *p=(int*)malloc(40);if (p == NULL){return 1;}//使用for (int i = 0; i <= 10; i++){*(p + i) = i;//當訪問第11個元素時,就越界訪問了}free(p);p = NULL;return 0;
}

修改

3 .對?動態開辟內存使?free釋放

錯誤代碼展示

int main()
{int a = 10;//?動態開辟內存int* p = (int*)malloc(40);if (p == NULL){return 1;}//使用//……p = &a;//p指向的空間不再是堆區上空間了free(p);p = NULL;return 0;
}

4 .使?free釋放?塊動態開辟內存的?部分

錯誤代碼展示

void test()
{int *p = (int *)malloc(100);if (p == NULL)return 1;//使用p++;//釋放free(p);//p不再指向動態內存的起始位置 
}

5. 對同?塊動態內存多次釋放

錯誤代碼展示


void test()
{int* p = (int*)malloc(100);if (p == NULL){return 1;}free(p);free(p);//重復釋放 
}

修改

6.動態開辟內存忘記釋放(內存泄漏)

malloc、calloc、realloc申請的空間如果不主動釋放,出了作用域不會銷毀
釋放的方式

  1. free主動釋放
  2. 直到程序結束,由操作系統回收

malloc函數出了test函數申請的空間不會銷毀,造成內存泄漏

錯誤代碼展示


void test()
{int* p = (int*)malloc(100);if (NULL != p){*p = 20;}
}int main()
{test();while (1);
}

修改

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

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

相關文章

什么是前端框架中的數據綁定(data binding)?有哪些類型的數據綁定?

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

YOLOv5白皮書-第Y4周:common.py文件解讀

YOLOv5白皮書-第Y4周:common.py文件解讀 YOLOv5白皮書-第Y4周:common.py文件解讀0.導入需要的包和基本配置1.基本組件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要類2.1 非極大值抑制&#xff08;NMS&…

vue3中的基本語法

目錄 基礎素材 vue3的優化 使用CompositionAPI理由 1. reactive() 函數 2. ref() 函數 2.1. ref的使用 2.2. 在 reactive 對象中訪問 ref 創建的響應式數據 3. isRef() 函數 4. toRefs() 函數 5. computed() 5.1. 通過 set()、get()方法創建一個可讀可寫的計算屬性 …

函數——遞歸6(c++)

角谷猜想 題目描述 日本一位中學生發現一個奇妙的 定理&#xff0c;請角谷教授證明&#xff0c;而教授 無能為力&#xff0c;于是產生了角谷猜想。 猜想的內容&#xff1a;任給一個自然數&#xff0c; 若為偶數則除以2&#xff0c;若為奇數則乘 3加1&#xff0c;得到一個新的…

git命令整理

一、什么是git Git 是為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。 分布式管理系統&#xff0c;可以快速的查看文件各個版本的改動。比如在第5行加了一個單詞“Linux”&#xff0c;在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件&#xf…

PyTorch深度學習快速入門

PyTorch深度學習快速入門 1.PyTorch環境配置及安裝2.python編輯器的選擇、安裝、配置&#xff08;pycharm、JupyTer安裝&#xff09;3.為什么torch.cuda.is_available()返回false4.python學習中兩大法寶函數&#xff08;也可用在pytorch&#xff09;5.pycharm和jupyter&#xf…

golang goroutine 如何退出?

上一講說到調度器將maingoroutine推上舞臺&#xff0c;為它鋪好了道路&#xff0c;開始執行runtime.main函數。這一講&#xff0c;我們探索maingoroutine以及普通goroutine從執行到退出的整個過程。 //Themaingoroutine. funcmain(){ //gmaingoroutine&#xff0c;不再是g0了 …

Python列表中添加刪除元素不走彎路

1.append() 向列表中添加單個元素&#xff0c;一般用于尾部追加 list1 ["香妃", "乾隆", "賈南風", "趙飛燕", "漢武帝"]list1.append("周瑜") print(list1) # [香妃, 乾隆, 賈南風, 趙飛燕, 漢武帝, 周瑜]…

STM32標準庫——(14)I2C通信協議、MPU6050簡介

1.I2C通信 I2C 通訊協議(Inter&#xff0d;Integrated Circuit)是由Phiilps公司開發的&#xff0c;由于它引腳少&#xff0c;硬件實現簡單&#xff0c;可擴展性強&#xff0c; 不需要USART、CAN等通訊協議的外部收發設備&#xff0c;現在被廣泛地使用在系統內多個集成電路(IC)間…

【LeetCode每日一題】【BFS模版與例題】863.二叉樹中所有距離為 K 的結點

BFS的基本概念 BFS 是廣度優先搜索&#xff08;Breadth-First Search&#xff09;的縮寫&#xff0c;是一種圖遍歷算法。它從給定的起始節點開始&#xff0c;逐層遍歷圖中的節點&#xff0c;直到遍歷到目標節點或者遍歷完所有可達節點。 BFS 算法的核心思想是先訪問當前節點的…

計算機網絡_2.2物理層下面的傳輸媒體

2.2物理層下面的傳輸媒體 一、傳輸媒體的分類二、導向型傳輸媒體1、同軸電纜2、雙絞線3、光纖&#xff08;1&#xff09;光纖通信原理&#xff08;2&#xff09;光纖組成&#xff08;4&#xff09;多模光纖與單模光纖對比&#xff08;5&#xff09;光纖的波長與規格&#xff08…

海量淘寶商品數據如何實現自動化抓取?

隨著電子商務的飛速發展&#xff0c;淘寶作為中國最大的網絡購物平臺之一&#xff0c;其商品數據具有極高的商業價值。然而&#xff0c;如何有效地從海量的淘寶商品數據中抓取所需信息&#xff0c;成為了一個技術挑戰。本文將深入探討如何實現淘寶商品數據的自動化抓取&#xf…

c# using 用法

using命令空間 導入命名空間中的所有類型 如&#xff1a;using System.Text; using別名 using別名包括詳細命名空間信息的具體類型&#xff0c;這種做法有個好處就是當同一個cs引用了兩個不同的命名空間&#xff0c;但兩個命名空間都包括了一個相同名字的類型的時候。當需要…

SQL加鎖機制深度解析:不同隔離級別與索引類型的影響

首先&#xff0c;我們先理解一下涉及的幾個核心概念&#xff1a; 主鍵 (Primary Key): 主鍵是數據庫表中的特殊列&#xff0c;用于唯一標識表中的每一行。它不能有重復值&#xff0c;也不能有NULL值。 唯一索引 (Unique Index): 唯一索引類似于主鍵&#xff0c;但它允許NULL值…

數據可視化基礎與應用-02-基于powerbi實現連鎖糕點店數據集的儀表盤制作

總結 本系列是數據可視化基礎與應用的第02篇&#xff0c;主要介紹基于powerbi實現一個連鎖糕點店數據集的儀表盤制作。 數據集描述 有一個數據集&#xff0c;包含四張工作簿&#xff0c;每個工作簿是一張表&#xff0c;其中可以銷售表可以劃分為事實表&#xff0c;產品表&am…

【Python小技巧】將list變量寫入本地txt文件并讀出為list變量的方法(附代碼)

文章目錄 前言一、萬能的txt和eval大法二、具體代碼和使用方法總結 前言 使用Python&#xff0c;我們偶爾需要將一些變量保存到本地&#xff0c;并被其它代碼讀取作為參數&#xff0c;那么怎么辦呢&#xff1f; 一、萬能的txt和eval大法 這里教大家一個簡單的方法&#xff0c…

912. 排序數組(快速排序)

快速排序&#xff1a; 分&#xff1a;找到分成兩部分進行排序的pos&#xff08;使用partition&#xff09;治&#xff1a;分別對這兩部分進行快速排序 重點&#xff1a;partition 找到pivot&#xff08;兩個方法&#xff1a;1. 取第一個值&#xff1b;2. 取隨機值&#xff09…

Linux時間同步(PPS、PTP、chrony)分析筆記

1 PPS(pulse per second) 1.1 簡介 LinuxPPS provides a programming interface (API) to define in the system several PPS sources. PPS means "pulse per second" and a PPS source is just a device which provides a high precision signal each second so t…

每日一題 2673使二叉樹所有路徑值相等的最小代價

2673. 使二叉樹所有路徑值相等的最小代價 題目描述&#xff1a; 給你一個整數 n 表示一棵 滿二叉樹 里面節點的數目&#xff0c;節點編號從 1 到 n 。根節點編號為 1 &#xff0c;樹中每個非葉子節點 i 都有兩個孩子&#xff0c;分別是左孩子 2 * i 和右孩子 2 * i 1 。 樹…

Java緩存簡介

內存訪問速度和硬盤訪問速度是計算機系統中兩個非常重要的性能指標。 內存訪問速度&#xff1a;內存是計算機中最快的存儲介質&#xff0c;它的訪問速度可以達到幾納秒級別。內存中的數據可以直接被CPU訪問&#xff0c;因此讀寫速度非常快。 硬盤訪問速度&…