C語言的內存分配:malloc和free

使用庫函數分配和管理內存。在運行時,分配更多的內存給程序使用,主要工具是malloc函數,這個函數接受一個參數:所需要要的內存字節數。malloc函數會找到合適的空閑內存塊,這樣的內存是匿名的,即malloc分配了內存后,不會為其賦名,返回動態分配內存塊的首字節地址,我們可以將這個地址賦給一個指針變量,使用這個指針訪問這塊內存。

malloc函數的返回類型通常被定義為指向char的指針。從ANSI C標準開始,C使用一個新的類型:指向void的指針,該類型相當于一個通用指針。malloc可用于返回指向數組的指針、指向結構體指針等,所以通常該函數的返回值會被強制轉換為匹配的類型。在ANSI C中,我們應該堅持使用強制類型轉換,因為這樣可以提高代碼的可讀性,否則,我們就不容易記住這個指針所指向的實際類型,這樣的閱讀性就大打折扣。把指針void的指針賦給任意類型的指針完全不用考慮類型匹配的問題。如果malloc申請內存分配失敗,會返回空指針。

double* ptd;
ptd = (double*)malloc(30*sizeof(double));

聲明數組有三種方式:

- 聲明數組時,用常量表達式表示數組的維度,用數組名訪問數組的元素。可以用靜態內存成功動態創建這種數組。

- 聲明變長數組時,用變量表達式表示數組的維度,用數組名訪問數組元素,這種數組只能在自動內存中創建。

- 聲明一個指針,調用malloc函數,將其返回值賦給指針,使用指針訪問數組元素,該指針可以是自動或靜態的。

動態分配內存的存儲期從調用malloc函數分配內存到調用free函數釋放內存為止。malloc函數要和free函數一起使用,free函數的參數是malloc返回的指針,free用于釋放之前malloc申請的內存。

靜態內存的數量在編譯時固定的。在程序運行期間也不會改變。自動變量使用的內存數量在程序執行期間自動增加或減少。但動態分配的內存數量只會增加,除非調用free來進行釋放。

分配內存還可用使用calloc函數:

double* buf;
buf = (double*)calloc(100,sizeof(double));

和malloc函數一樣, 在ANSI C之前,calloc函數也返回指向char的指針,在ANSI C之后,返回指向void的指針。如果存儲不同的類型,應使用強制類型轉換運算符。calloc接受兩個參數,一個是所需要的存儲單元的數量,第二個參數為存儲單元的大小(以字節為單位)。

calloc函數有一個特點,會把塊中的所位位置都設置為0.calloc函數也需要要用free函數來釋放分配的內存。

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

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

相關文章

本地安裝 Grafana Loki

本地安裝 Grafana Loki 一、 安裝 Loki1. 下載 Loki2. 創建 Loki 配置文件3. 創建 Loki 服務 二、安裝 Promtail1. 下載 Promtail2. 創建 Promtail 配置文件3. 創建 Promtail 服務 三、 安裝 Grafana四、啟動所有服務五、添加loki 數據源1. 添加儀表板2. 日志查詢面板 json 參考…

趣味數學300題1981版-十五個正方形

分析:移動兩根變成11個正方形很簡單: 移動4根變成15個正方形,分析: 一個田字格包含5個正方形,若要15個正方形需要3個田字格,如果3個田字格完全不重合,需要6*318根火柴。如果合并正方形的邊&…

IDEA——Mac版快捷鍵

目錄 按鍵含義常用組合代碼生成快捷鍵:代碼追蹤快捷鍵:高效編輯快捷鍵:代碼重構快捷鍵:工具類快捷鍵:常規文件操作快捷鍵: 按鍵含義 ? command Command鍵(?)相當于Windows中的Con…

基于Spring Boot的興順物流管理系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

Prompt:創造性的系統分析者

分享的提示詞: 你是一個創造性的系統分析者,作為咨詢師,你具有以下特質: 基礎能力: 深入理解我的系統性模式 識別模式間的隱藏聯系 發現出人意料的關聯 提供令人驚訝的洞見 工作方式: 在每次回應中至少…

Andorid 學習 Compose UI(1):Box

今天學習和實驗一下Android 的compose UI,寫一些很小的Demo實驗。下面和css 布局有點相似性。 如Box 看起來像html 當中的 div ,compose UI 提供Modifier 很多設置。你會發現Text,Box,Row,Image等組件 都有這個屬性。我們處理任務包括對齊布局&#xff0…

Selenium實戰案例1:論文pdf自動下載

在上一篇文章中,我們介紹了Selenium的基礎用法和一些常見技巧。今天,我們將通過中國科學:信息科學網站內當前目錄論文下載這一實戰案例來進一步展示Selenium的web自動化流程。 目錄 中國科學:信息科學當期目錄論文下載 1.網頁內…

《炒股養家心法.pdf》 kimi總結

《炒股養家心法.pdf》這篇文章詳細闡述了一位超級游資炒股養家的心得與技巧,展示了其從40萬到10億的股市傳奇。以下是文章中炒股技巧和心得的詳細總結: 1.核心理念 市場情緒的理解:炒股養家強調,股市的本質是群體博弈&#xff0c…

2025年華為手機解鎖BL的方法

注:本文是我用老機型測試的,新機型可能不適用 背景 華為官方已經在2018年關閉了申請BL解鎖碼的通道,所以華為手機已經無法通過官方獲取解鎖碼。最近翻出了一部家里的老手機華為暢玩5X,想著能不能刷個系統玩玩,但是卡…

Perfectly Clear WorkBench深度解析:專業圖像處理軟件的高效應用

在圖像處理領域,面對照片曝光不足、色彩失真、細節模糊等常見問題,一款專業且高效的圖像處理軟件顯得尤為重要。今天,本文將為大家詳細介紹Perfectly Clear WorkBench這款圖像處理軟件,幫助大家更好地了解并應用其功能,提升照片質量。 一、智能圖像校正,解決常見問題 Pe…

使用 DistilBERT 進行資源高效的自然語言處理

DistilBERT 是 BERT 的一個更小、更快的版本,在減少資源消耗的同時仍能保持良好性能。對于計算能力和內存受限的環境來說,它是一個理想的選擇。 在自然語言處理(NLP)中,像 BERT 這樣的模型提供了高精度和出色的性能。然…

【后端基礎】布隆過濾器原理

文章目錄 一、Bloom Filter(布隆過濾器)概述1. Bloom Filter 的特點2. Bloom Filter 的工作原理 二、示例1. 添加與查詢2. 假陽性 三、Bloom Filter 的操作1、假陽性概率2、空間效率3、哈希函數的選擇 四、應用 Bloom Filter 是一種非常高效的概率型數據…

Pytorch實現論文之三元DCGAN生成RGB圖像用于紅外圖像著色生成

簡介 簡介:采用了三次DCGAN單獨生成單通道圖像之后進行組成RGB圖像放入鑒別器中檢測,并在鑒別器和生成器的損失訓練中采用梯度方法來提升或者降低權重。該方法將用于獲得紅外圖像著色的生成。 論文題目:Infrared Image Colorization based on a Triplet DCGAN Architectur…

Qt中QDockWidget的使用方式

在PyQt5中使用QDockWidget可以創建靈活的停靠窗口,增強應用程序的多功能性。以下是詳細的步驟和示例代碼: 基本步驟 導入模塊:確保導入必要的PyQt5模塊。創建主窗口:繼承QMainWindow并初始化界面。設置中心部件:例如…

docker獨立部署milvus向量數據庫

milvus鏡像:國外封鎖,國內源也不好用。基本上所有源都不能用 首先想到阿里云服務,但是阿里云國外服務器便宜的300~400呢。 基于成本考慮終于裝上心心念念的milvus(*^▽^*) 安裝 Milvus 安裝 Milvus 獨立版 wget https://raw.githubuserco…

【SpringBoot整合系列】HttpClient遠程訪問的示例

前言 使用Apache的HttpClient庫,添加Apache HttpClient的依賴。工具類的封裝。通常,工具類需要處理GET、POST請求,可能還有其他方法如PUT、DELETE。需要設計一個工具類,提供靜態方法,可以發送請求,并處理響…

Git操作整體流程

文章目錄 1.Git創建個人倉庫2、Git全局配置3、Git本地管理4. Git本地管理常用命令匯總5、使用Git命令將項目提交到遠程碼云管理6.使用IDEA進行管理7、Idea里面的終端8、關于提交總結 1.Git創建個人倉庫 打開https://gitee.com/,登錄個人賬號,右上角加號…

MySQL MHA 部署全攻略:從零搭建高可用數據庫架構

文章目錄 1.MHA介紹2.MHA組件介紹3.集群規劃4.服務器初始化5.MySQL集群部署5.1 安裝MySQL集群5.2 配置一主兩從5.3 測試MySQL主從5.4 賦予MHA用戶連接權限 6.安裝MHA環境6.1 安裝MHA Node6.2 安裝MHA Manager 7.配置MHA環境8.MySQL MHA高可用集群測試8.1 通過VIP連接MySQL8.2模…

如何查看java的字節碼文件?javap?能用IDEA嗎?

編譯指令: javac YourProject.java 查看字節碼文件的指令: javap -c -l YourProject.class 不添加-c指令就不會顯示字節碼文件: 不添加 -l 就不會顯示源代碼和字節碼文件的對應關系: 添加-l之后多出來這些: IDEA不太…

1、Window Android 13模擬器 將編譯的映像文件導入Android Studio

1、環境準備 編譯環境:Ubuntu-18.04.5編譯版本:android13-release下載地址:清華大學開源軟件鏡像站AOSP # 下載repo # 同步代碼:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…