亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c語言動態(tài)內存分配知識點及實例

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

c語言怎么實現動態(tài)內存分配

我們經常會預先給程序開辟好內存空間,然后進行操作。

int arr[5] ;

對這個數組我們在定義的時候必須給提前開辟好空間,并且在程序執(zhí)行的過程中,這個開辟的內存空間是一直存在的,除非等到這個函數執(zhí)行完畢,才會將空間釋放。有個問題就是這個數組在程序中無法被修改。

這些問題給我們造成了一些使用上的不方便,所以,C中提供了malloc()函數。

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

例:

double *p;

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

在這個程序中,首先開辟了30個double類型的空間,然后把p指向這個空間的位置。在這里的指針是指向第一個double值。并不是我們全部開辟的30個double的空間。這就和數組一樣,指向數組的指針式指向數組首元素的地址,并不是整個數組的元素。所以,在這里我們的操作也和數組是一樣的,

p[0]就是第一個元素,p[1]就是第二個元素。

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

int arr[n];

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

//我們在這里使用的時候要元素個數乘類型字節(jié)長度,這樣就達到了動態(tài)開辟內存空間。

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

例:

對于上面我們所開辟的空間進行釋放,那么我們就可以這樣

free(p);

程序還調用了exit()函數,這個函數是在內存分配失敗時結束程序。

程序例子:

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

這個程序主要用來檢測malloc返回值條件有誤。

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

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

知識點補充:

常見的動態(tài)內存錯誤

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

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

相關文章

  • ffmpeg?在?win平臺下的編譯以及集成

    ffmpeg?在?win平臺下的編譯以及集成

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

    C語言編寫掃雷小程序

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

    C語言學習筆記之字符串間的那些事

    字符串是C語言中最重要的數據類型之一,最近借助《C Primer Plus》一書來學習C中的常用字符串操作,在此作為筆記記錄,下面這篇文章主要給大家介紹了C語言學習筆記之字符串間的那些事,需要的朋友可以參考下
    2022-04-04
  • C語言實現數獨程序的示例代碼

    C語言實現數獨程序的示例代碼

    數獨是源自瑞士的一種數學游戲。是一種運用紙、筆進行演算的邏輯游戲。本文將利用C語言實現數獨程序,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • Qt在vs2019中使用及設置方法

    Qt在vs2019中使用及設置方法

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

    C++?多繼承詳情介紹

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

    CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C語言菜鳥基礎教程之自定義函數

    C語言菜鳥基礎教程之自定義函數

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

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

    XML文件可以用來存儲項目中的數據,它相當于一個簡單的數據庫,下面這篇文章主要給大家介紹了關于Qt讀寫XML文件(含源碼+注釋)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • C++利用靜態(tài)成員或類模板構建鏈表的方法講解

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

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

最新評論