1. 程式人生 > >c語言記憶體分配函式

c語言記憶體分配函式

三個函式的宣告分別是: 
void* realloc(void* ptr, unsigned newsize); 
void* malloc(unsigned size); 
void* calloc(size_t nelem, size_t elsize); 
都在stdlib.h函式庫內

原型:extern void *realloc(void *mem_address, unsigned int newsize);

用法:#include <alloc.h> 
功能:改變mem_address所指記憶體區域的大小為newsize長度。

說明:如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標NULL。 
        當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

原型:extern void *malloc(unsigned int num_bytes); 
用法:#include <alloc.h>

功能:分配長度為num_bytes位元組的記憶體塊

說明:如果分配成功則返回指向被分配記憶體的指標,否則返回空指標NULL。 
        當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

原型:extern void *calloc(int num_elems, int elem_size); 
用法:#include <alloc.h> 
功能:為具有num_elems個長度為elem_size元素的陣列分配記憶體 
說明:如果分配成功則返回指向被分配記憶體的指標,否則返回空指標NULL。 
        當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

區別:

1、calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不初始化,裡邊資料是隨機的垃圾資料

2、realloc是給一個已經分配了地址的指標重新分配空間,引數ptr為原有的空間地址,newsize是重新申請的地址長度

相關推薦

C 語言記憶體分配函式

1、ANSI C 中的記憶體空間分配函式 ANSI C 中有 3 個分配記憶體的函式:malloc,calloc,realloc。 函式原型: #include <stdlib.h> void *malloc(size_t size); void

c語言記憶體分配函式

三個函式的宣告分別是:  void* realloc(void* ptr, unsigned newsize);  void* malloc(unsigned size);  void* calloc(size_t nelem, size_t elsize);  都在st

C語言記憶體分配方式及malloc,realloc,calloc,alloc.free函式

C語言跟記憶體分配方式   (1) 從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數。   (2)在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元

C語言記憶體分配規則

動態儲存區(堆) malloc動態分配在heap堆區。 程式設計師自己分配自己釋放。 動態儲存區(棧) 自動變數、const變數在stack棧區。 系統自動分配釋放。 靜態儲存區 extern全域性變數在static靜態儲存區。一旦分配,不會被回收,可讀可寫 程式程式

C語言 記憶體分配和static關鍵字

C語言記憶體分配機制 (1)程式碼區(text segment)。.text程式碼區指令根據程式設計流程依次執行,對於順序指令,則只會執行一次(每個程序),如果反覆,則需要使用跳轉指令,如果進行遞迴,則需要藉助棧來實現。程式碼區的指令中包括操作碼和要操作的物件(

C語言記憶體分配calloc,malloc,alloc,realloc的區別

  void *malloc(size_t size);malloc函式為長度size的物件分配記憶體,並返回指向分配區域的指標;若無法滿足要求,則返回NULL。該函式不對分配的記憶體區域進行初始化。  void *calloc(size_t nobj, size_t

C語言記憶體分配:malloc、calloc、realloc

大家都知道程式在記憶體中的佈局分為:棧區、堆、靜態變數區、常量區等幾個部分。其中堆上的空間分配是由程式設計師自己來管理的,包括空間的申請和釋放。 我們這裡就說一下C標準庫中提供的幾個在堆上操作空間的函式: 1、void*malloc(unsigned size); 2

C語言記憶體分配問題和C語言中的記憶體

C語言記憶體分配問題 1、C中記憶體分為四個區棧:用來存放函式的形參和函式內的區域性變數。由編譯器分配空間,在函式執行完後由編譯器自動釋放。 堆:用來存放由動態分配函式(如malloc)分配的空間。是由程式設計師自己手動分配的,並且必須由程式設計師使用free釋放。如果忘記用

C語言 記憶體分配 地址 指標 陣列 引數 例項解析

指標簡介 : 指標式儲存變數地址的變數; -- 增加閱讀難度 : 指標 和 goto 語句會增加程式的理解難度, 容易出現錯誤; -- ANSI C : American National Standards Institute 美國國家標準學會, 即標準

C語言記憶體分配及各種資料儲存位置

版本宣告:本文轉載於公眾號TeachPlus指標的使用,一直是c語言面試題中必考的部分,因為指標本身使用的複雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合,因此我們將會使用五篇專題的篇幅來介紹指標。分析下面的程式,指出程式中的錯誤:# include <st

C語言記憶體操作函式的實現

>memcpy:void *memcpy(void *dest,const void *source,size_t num);(1)函式memcpy從source的位置開始向後複製num個位元組的資料到dest的記憶體位置。(2)這個函式在遇到'\0'的時候並不會停下來

C語言記憶體分配函式malloc/ calloc/ realloc及記憶體釋放free

前言: 記憶體區域劃分與分配: 1、棧區(stack)——程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等,程式結束時由編譯器自動釋放。 2、堆區(heap) —— 在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可

c語言動態分配記憶體記憶體分配部分函式

#include<stdio.h> /** 在C中動態分配記憶體的基本步驟有: 1,用malloc類的函式分配記憶體; 2,用這些記憶體支援應用程式 3,用free函式釋放記憶體 二、動態記憶體分配函式     malloc :從堆上分配記憶體 &nbs

C語言:使用realloc()函式重新分配記憶體

realloc(void *__ptr, size_t __size):更改已經配置的記憶體空間,即更改由malloc()函式分配的記憶體空間的大小。 如果將分配的記憶體減少,realloc僅僅是改變索引的資訊。 如果是將分配的記憶體擴大,則有以下情況:

記憶體分配函式C語言

C 標準函式庫提供了許多函式來實現對堆上記憶體管理 malloc函式:malloc函式可以從堆上獲得指定位元組的記憶體空間(必須初始化) free函式:釋放記憶體,防止記憶體洩露 calloc函式:與 malloc類似,但不需要初始化 realloc函式

C語言--動態分配記憶體空間的使用方法

#include <stdio.h> #include <stdlib.h> int main() { int i; int *nums; //為指標分配動態的記憶體空間 // nums = (int *)mall

C語言:動態分配記憶體,malloc()與realloc()區別

#include <stdio.h> #include <stdlib.h> //動態分配記憶體標頭檔案 int main() { /* 何為動態?

c記憶體分配與釋放(malloc,realloc,calloc,free)函式內容的整理

程式例2    從這個例子可以看出calloc分配完儲存空間後將元素初始化。   #include<stdio.h>   #include<stdlib.h>   int main(void)   {   int i;   int *pn=(int

關於C語言的malloc函式以及記憶體洩漏的問題

malloc函式 malloc函式的原型: (void *)malloc(int size)  malloc函式的返回值是一個void型別的指標,引數為int型別的資料,即申請分配的記憶體大小,單位是