欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語(yǔ)言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例

 更新時(shí)間:2020年03月02日 10:42:17   作者:angryTom  
在本篇文章里小編給大家整理的是關(guān)于c語(yǔ)言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例,需要的朋友們可以學(xué)習(xí)下。

c語(yǔ)言怎么實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配

我們經(jīng)常會(huì)預(yù)先給程序開(kāi)辟好內(nèi)存空間,然后進(jìn)行操作。

int arr[5] ;

對(duì)這個(gè)數(shù)組我們?cè)诙x的時(shí)候必須給提前開(kāi)辟好空間,并且在程序執(zhí)行的過(guò)程中,這個(gè)開(kāi)辟的內(nèi)存空間是一直存在的,除非等到這個(gè)函數(shù)執(zhí)行完畢,才會(huì)將空間釋放。有個(gè)問(wèn)題就是這個(gè)數(shù)組在程序中無(wú)法被修改。

這些問(wèn)題給我們?cè)斐闪艘恍┦褂蒙系牟环奖悖?,C中提供了malloc()函數(shù)。

關(guān)于malloc()函數(shù),這個(gè)函數(shù)它接受一個(gè)參數(shù):就是所需的內(nèi)存的字節(jié)數(shù)。然后malloc()找到可用內(nèi)存中那一個(gè)大小適合的塊。在這個(gè)過(guò)程中,malloc()可以來(lái)返回那塊內(nèi)存第一個(gè)字節(jié)的地址。所以,也就意味了我們可以使用指針來(lái)操作。malloc()可以用來(lái)返回?cái)?shù)組指針、結(jié)構(gòu)指針等等,所以我們需要把返回值的類(lèi)型指派為適當(dāng)?shù)念?lèi)型。當(dāng)malloc()找不到所需的空間時(shí),它將返回空指針。

例:

double *p;

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

在這個(gè)程序中,首先開(kāi)辟了30個(gè)double類(lèi)型的空間,然后把p指向這個(gè)空間的位置。在這里的指針是指向第一個(gè)double值。并不是我們?nèi)块_(kāi)辟的30個(gè)double的空間。這就和數(shù)組一樣,指向數(shù)組的指針式指向數(shù)組首元素的地址,并不是整個(gè)數(shù)組的元素。所以,在這里我們的操作也和數(shù)組是一樣的,

p[0]就是第一個(gè)元素,p[1]就是第二個(gè)元素。

至此,我們就可以掌握到一種聲明動(dòng)態(tài)數(shù)組的方法。

int arr[n];

p=(int *)malloc(n*sizeof(int));

//我們?cè)谶@里使用的時(shí)候要元素個(gè)數(shù)乘類(lèi)型字節(jié)長(zhǎng)度,這樣就達(dá)到了動(dòng)態(tài)開(kāi)辟內(nèi)存空間。

當(dāng)我們使用malloc()開(kāi)辟完內(nèi)存空間以后,我們所要考慮的就是釋放內(nèi)存空間,在這里,C給我們提供了free()函數(shù)。free()的參數(shù)就是malloc()函數(shù)所返回的地址,釋放先前malloc()函數(shù)所開(kāi)辟的空間。

例:

對(duì)于上面我們所開(kāi)辟的空間進(jìn)行釋放,那么我們就可以這樣

free(p);

程序還調(diào)用了exit()函數(shù),這個(gè)函數(shù)是在內(nèi)存分配失敗時(shí)結(jié)束程序。

程序例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>//malloc()函數(shù)被包含在malloc.h里面
#include<stdlib.h>
int main(void)
{
  char*a = NULL;//聲明一個(gè)指向a的char*類(lèi)型的指針
  a = (char*)malloc(100 * sizeof(char));//使用malloc分配內(nèi)存的首地址,然后賦值給a
  if (!a)//如果malloc失敗,可以得到一些log
  {
    perror("malloc");
    return-1;
  }
  sprintf(a, "%s", "HelloWorld\n");//"HelloWorld\n"寫(xiě)入a指向的地址
  printf("%s\n", a);//輸出用戶(hù)輸入的數(shù)據(jù)
  free(a);//釋放掉使用的內(nèi)存地址
  system("pause");
  return 0;//例2有無(wú)內(nèi)存泄露?
}

這個(gè)程序主要用來(lái)檢測(cè)malloc返回值條件有誤。

在這里我們需要注意,在C中,類(lèi)型指派(char *)是可選的,但是在C++中這個(gè)是必須有的,所以使用類(lèi)型指派將使把C程序移植到C++更容易。

使用動(dòng)態(tài)數(shù)組,主要是為了獲得程序的靈活性。我們可以需要多少個(gè)元素就讓數(shù)組開(kāi)辟多少個(gè)。不需要浪費(fèi)空間。

知識(shí)點(diǎn)補(bǔ)充:

常見(jiàn)的動(dòng)態(tài)內(nèi)存錯(cuò)誤

常見(jiàn)的錯(cuò)誤有:對(duì)NULL指針進(jìn)行解引用操作、對(duì)分配的內(nèi)存進(jìn)行操作時(shí)越過(guò)邊界、釋放并非內(nèi)存分配的內(nèi)存、試圖釋放一塊動(dòng)態(tài)分配的內(nèi)存的一部分以及一塊動(dòng)態(tài)內(nèi)存釋放之后被繼續(xù)使用。

到此這篇關(guān)于c語(yǔ)言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例的文章就介紹到這了,更多相關(guān)c語(yǔ)言怎么實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ffmpeg?在?win平臺(tái)下的編譯以及集成

    ffmpeg?在?win平臺(tái)下的編譯以及集成

    這篇文章主要為大家介紹了ffmpeg?在?win平臺(tái)下的編譯以及集成詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • C語(yǔ)言編寫(xiě)掃雷小程序

    C語(yǔ)言編寫(xiě)掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言編寫(xiě)掃雷小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事

    C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事

    字符串是C語(yǔ)言中最重要的數(shù)據(jù)類(lèi)型之一,最近借助《C Primer Plus》一書(shū)來(lái)學(xué)習(xí)C中的常用字符串操作,在此作為筆記記錄,下面這篇文章主要給大家介紹了C語(yǔ)言學(xué)習(xí)筆記之字符串間的那些事,需要的朋友可以參考下
    2022-04-04
  • C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)程序的示例代碼

    C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)程序的示例代碼

    數(shù)獨(dú)是源自瑞士的一種數(shù)學(xué)游戲。是一種運(yùn)用紙、筆進(jìn)行演算的邏輯游戲。本文將利用C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)程序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Qt在vs2019中使用及設(shè)置方法

    Qt在vs2019中使用及設(shè)置方法

    這篇文章主要介紹了Qt在vs2019中使用及設(shè)置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++?多繼承詳情介紹

    C++?多繼承詳情介紹

    這篇文章主要介紹了C++?多繼承詳情,C++支持多繼承,即允許一個(gè)類(lèi)同時(shí)繼承多個(gè)類(lèi)。只有C++等少數(shù)語(yǔ)言支持多繼承,下面我們就來(lái)看看具體的多繼承介紹吧,需要的朋友可以參考一下
    2022-03-03
  • CRITICAL_SECTION用法案例詳解

    CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了CRITICAL_SECTION用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之自定義函數(shù)

    C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之自定義函數(shù)

    自定義函數(shù): 必須直接或間接在main中調(diào)用,否則該自定義函數(shù)不會(huì)被執(zhí)行。 返回值類(lèi)型 函數(shù)名(參數(shù)類(lèi)型 參數(shù)名,參數(shù)類(lèi)型 參數(shù)名...)
    2017-10-10
  • Qt讀寫(xiě)XML文件的方法詳解(含源碼+注釋)

    Qt讀寫(xiě)XML文件的方法詳解(含源碼+注釋)

    XML文件可以用來(lái)存儲(chǔ)項(xiàng)目中的數(shù)據(jù),它相當(dāng)于一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Qt讀寫(xiě)XML文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C++利用靜態(tài)成員或類(lèi)模板構(gòu)建鏈表的方法講解

    C++利用靜態(tài)成員或類(lèi)模板構(gòu)建鏈表的方法講解

    這篇文章主要介紹了C++利用靜態(tài)成員或類(lèi)模板構(gòu)建鏈表的方法講解,鏈表是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),而在C++中構(gòu)件單鏈表還是稍顯復(fù)雜,需要的朋友可以參考下
    2016-04-04

最新評(píng)論