成人app

編程預備

點擊打開在線編譯器,邊學邊練

兩個必備的函數知識(其均來自于stdlib.h庫中)

1. Malloc函數

成人appmalloc()函數在堆中申請分配一個大小為size個字節的連續內存空間,若成功分配,則返回一個指向所分配空間起始地址的指針,否則返回空指針(NULL)。

 

2.Free函數

free()函數用來釋放已分配的內存空間,參數p是待釋放的內存空間的首指針

 

成人app總結來說malloc就是用來申請內存空間,而free是為了釋放內存空間,這兩個函數在C/C++語言的數據結構中十分重要,也十分常用,請務必牢記,這里總結幾個新手易犯的錯誤:

成人appa)忽略判斷是否內存申請失敗,如果內存申請失敗并沒有執行一些中斷之類的操作,程序會繼續向下運行,直到各種錯誤把整個程序弄崩潰

成人appb)使用malloc不適用free,這在做題中似乎無關緊要,但是一旦在工作中養成這樣的習慣,則會制造出很多無用的內存垃圾,造成程序效率的低下,當然了,后面出現了內存回收機制可以自動幫我們free掉內存垃圾,但是依舊要養成即時釋放內存的好習慣。

c)使用指針后胡亂進行移動,產生不知名的指針位移,這樣的效果往往是不知道自己的程序究竟出了什么錯誤,也極其難修改。

一般而言,常規的內存分配,使用再到釋放的過程如下:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int *p;     //定義一個指向整形的指針變量
    p=(int*)malloc(5*sizeof(int));  //申請5個整形大小的內存空間并返回起始地址給p
    if(p==NULL){    //申請失敗
        //執行申請失敗的代碼,一般print一個報錯
        exit(1);    //退出
    }
    p[0]=1000;  //為空間中添加數據
    printf("%d",p[0]);  //打印這個數據
    free(p);    //釋放p的內存空間,此時p依舊存在,只不過失去了指向的對象,成了野指針
    p=NULL; //為其賦NULL,此時它不再是一個野指針
    return 0;
}

很顯然,我們設計一個數據結構程序的過程是先定義所需要的變量與指針變量---->進行內存分配---->判斷是否分配成功(分配不成功就報錯或者退出程序)---->對指針空間中的數據進行操作(如賦值,修改,查詢,刪除) ---->完成操作后釋放指針

 

 

除上文提到的兩個函數外,在C++中引入的對象思維,有一個極其類似于malloc函數的方法,就是new方法,但他們還是有一些區別的:

new操作符從自由存儲區(free store)上為對象動態分配內存空間,而malloc函數從堆上動態分配內存。自由存儲區是C++基于new操作符的一個抽象概念,凡是通過new操作符進行內存申請,該內存即為自由存儲區。而堆是操作系統中的術語,是操作系統所維護的一塊特殊內存,用于程序的內存動態分配,C語言使用malloc從堆上分配內存,使用free釋放已分配的對應內存。



本文固定URL:http://hnsaiyang.com/course/94

上一課:內存
第一章 數據結構入門
第二章 鏈表
第三章 棧
第四章 隊列
第五章 從C語言到C++
第六章 串,數組,矩陣,廣義表
第七章 樹
第八章 圖
第九章 算法—查找
第十章 算法—排序
第十一章 算法&競賽,思維培養
第十二章 后記
Dotcpp在線編譯      (登錄可減少運行等待時間)