1. 程式人生 > >05-資料結構_預備知識-動態記憶體的分配和釋放

05-資料結構_預備知識-動態記憶體的分配和釋放

參看 C語言部分

1, 分配

    malloc

2, 釋放

    free
3, 增刪

    realloc

#include <stdio.h>
#include <malloc.h>

int main(void)
{
    int len;
    printf("please input array's length = ");
    scanf("%d", &len);
    
    /*
        malloc(位元組數), 在堆分配指定位元組數的記憶體, 並返回首地址
        (int *), 強制轉換, 返回的首地址是整型變數的地址
    */
    int * pArr = (int *)malloc( sizeof(int) * len );

    int i;
    for (i = 0; i < len; ++i)
    {
        printf("a[%d] = ", i);
        scanf("%d", pArr+i);
    }

    for (i = 0; i < len; ++i)
    {
        printf("a[%d] = %d, ", i, *(pArr+i));// pArr[i]
    }
    printf("\n");

    // 釋放
    free(pArr); // 將pArr指向的 4*len 個位元組的記憶體 釋放掉.

    return 0;
}


相關推薦

05-資料結構_預備知識-動態記憶體分配釋放

參看 C語言部分 1, 分配     malloc 2, 釋放     free 3, 增刪     realloc #include <stdio.h> #include <malloc.h> int main(void) { int

動態記憶體分配釋放(陳銳、葛麗萍 編著《跟我學資料結構》整理)

1.malloc函式 作用:在記憶體中分配一個長度為size 的連續儲存空間,返回一個指向分配空間的起始地址的指標。          如果分配失敗,則返回NULL。 原型: void *malloc(unsigned int size)

關於資料結構 堆 棧 樹 以及記憶體分配中的堆 棧

在現如今的教材中 關於棧,堆,樹等概念比較模糊 正確的解釋如下 棧是一種資料表 操作滿足先進後出(類似木桶) 【標準解釋:只能從表的固定一端對資料進行插入與刪除操作,另一端封死。開頭的一端為棧頂,封死的一端為棧底】 樹: 樹的邏輯結構:樹中任何結點都可以有零個或多個直接後繼節點,但至

簡單的動態記憶體分配釋放

掌握動態記憶體分配方法。 程式設計輸入學生人數n及某門課成績,計算並輸出其平均分的整數部分(請用malloc和free進行動態記憶體分配)。 input: 5 90 80 70 60 50 output: 70 #include <iostream> #include <mal

C語言之動態記憶體分配釋放

一,堆記憶體 1,堆記憶體特點 堆記憶體可以存放任意型別的資料,但需要自己申請與釋放。 2,堆大小 堆大小,想像中的無窮大,但實際使用中,受限於實際記憶體的大小和記憶體是否有連續性。 二,堆記憶體的申請與釋放 1,malloc函式

關於動態記憶體分配陣列的選用(變長選malloc,定長選陣列)

結論在最後,可直接看最後。 工作中遇到了一個這樣的問題。 需要在 一個結構體後面 繫結一個變數,但不能對原結構體進行修改。 比如說: Struct ss{ Int a; Char b; Float c; }; 在這個結構體內部不變的情況下,需要在其後繫結一個 double 

簡單理解動態記憶體分配靜態記憶體分配的區別

為了便於理解我們來舉個小例子,靜態記憶體分配和動態記憶體分配的方式我們可以比作我們去旅遊,旅遊之前沃恩肯定要做的事情是帶好錢,現在我們有兩種帶錢的方式,一種是一次性的帶足夠的錢,另一種是先帶一點錢,足夠我們買飛機票到達旅遊的地點,當我們看到什麼需要買的東西時,打電話給自己的親人或者朋友,讓他們給你打過你足夠買

Linux夥伴系統原理-記憶體分配釋放

主要分析Linux夥伴系統演算法,記憶體的分配和釋放 1.夥伴系統簡介      Linux核心記憶體管理的一項重要工作就是如何在頻繁申請釋放記憶體的情況下,避免碎片的產生, Linux採用夥伴系統解決外部碎片的問題,採用slab解決內 部碎片的問

Java直接記憶體分配釋放方式

一. 正常分配,回收由GC負責 新增jvm啟動引數:-verbose:gc -XX:+PrintGCDetails -XX:MaxDirectMemorySize=40M 迴圈執行以下程式碼,可以看到頻繁fullGC. ByteBuffer buffer =

Linux中的記憶體分配釋放之slab分配器分析(完)

        我們在上篇文章分析cache_grow()函式的時候涉及兩個函式,我們沒有細說。一個就是kmem_getpages()和kmem_freepages()函式,這兩個函式有3個引數。kmem_cahce_t:主要是把申請到的物件加到這個快取記憶體內   flag

delphi 指標的記憶體分配釋放

給字元指標(PChar、PWideChar、PAnsiChar)分配記憶體, 最佳選擇是: StrAlloc.StrAlloc 雖然最終也是呼叫了 GetMem, 但 StrAlloc 會在指標前面新增 Delphi 需要的 4 個管理位元組(記錄長度).StrAlloc

C語言之_指標陣列、結構體、動態記憶體分配

1、sizeof() int main() { int a[20]; int count=sizeof(a)/sizeof(int); printf(“%d\n”,count); return 0; } 2、指標陣列

資料結構__二叉搜尋樹

二叉搜尋樹 二叉搜尋樹(BST)又稱為二叉查詢樹、二叉排序樹。 1.特徵 二叉搜尋樹首先是一棵二叉樹; 對任意節點,如果其左子樹不為空,則左子樹上任意節點的值均不大於它的根節點的值; 如果其右子樹不為空,則右子樹上任意節點的值均不大於它的根節點的值; 任意節點的左右子樹也分別是二叉搜尋樹。 2.中序遍

資料結構必備基礎知識】之圖的基本概念詳解

一、前言 從今天開始就給大家分享有關於圖的概念和程式碼啦,不知道大家有沒有看夠樹的相關內容呢?以後還會慢慢給大家再分享的,程式碼要一遍一遍過,一輪一輪學習。第一輪樹就先到這裡,等第二輪還會給大家分享的。 圖應該是資料結構中處於霸王地位的一部分了,圖會涉及到圖論的相關知識,咱們現在還涉及不

c_資料結構_順序表

#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 線性表儲存空間的初始分配量 #define List_Increment 10 //線性表儲存空間的分配增量 #include<

c_資料結構_隊的實現

# 鏈式儲存#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//儲存空間初始分配量 #define STACKINCREMENT 10//儲存空間分配增量 #define TURE 1 #defi

資料結構_演算法

資料結構演算法的基本知識 演算法一般都可以用遞迴和迴圈兩個辦法來實現 遞迴的程式碼較簡潔 迴圈的效能較好 要根據題目的特點合理的選擇演算法 二維陣列上搜索路徑 一般使用回溯法(backtracking) 回溯法一般和遞迴相結合,如果不允許使用遞迴,可以使用棧來實現遞迴的過程

技術面試更注重專案經驗還是作業系統、資料結構等基礎知識

說下我的面試經驗吧,都是親身經歷,不喜勿噴: 我2017年12月份從上一家公司離職,一直到2018年3月份,基本上都在面試中度過來的。 先交代下背景:座標上海,做技術開發,我本人求職的職位是linux伺服器開發,最傾向的職位是伺服器開發主程或技術經理。我本人也是上幾家公司的面試官,因為接下來幾年面臨著成家

【通訊3】網路通訊基礎_預備知識

幾個概念: 埠:同一IP地址下可能有多個(同一單元樓有多個住戶,確定住戶) 路由:類似快遞投遞記錄 下圖就是一個路由記錄(訪問www.jikexueyuan.com的一個路由記錄)。         通過命令t

Scala - 05 - 資料結構

1- 陣列(Array) 陣列一般包括定長陣列和變長陣列。 可以不指明陣列型別,Scala會自動根據提供的初始化資料來推斷出陣列的型別。 在Scala中,對陣列元素的應用,是使用圓括號,而不是方括號。 示例:定長陣列 就是長度不變的陣列,在Scala中使用Array進行宣