malloc與calloc區別

來源:互聯網
上載者:User

一:它們都是動態分配記憶體,先看看它們的原型:

void *malloc( size_t size ); //分配的大小

void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的個數和每個元素的大小

共同點就是:它們返回的是 void * 類型,也就是說如果我們要為int或者其他類型的資料分配空間必須顯式強制轉換;

不同點是:用malloc分配儲存空間時,必須由我們計算需要的位元組數。如果想要分配5個int型的空間,那就是說需要5*sizeof(int)的記憶體空間:

int * ip_a;
ip_a = (int*)malloc( sizeof (int) * 5 );

而用calloc就不需要這麼計算了,直接:

ip_a = ( int* )calloc( 5, sizeof(int) );這樣,就分配了相應的空間,而他們之間最大的區別就是:用malloc只分配空間不初始化,也就是依然保留著這段記憶體裡的資料,而calloc則進行 了初始化,calloc分配的空間全部初始化為0,這樣就避免了可能的一些資料錯誤。

先寫段代碼體驗體驗....

#include <iostream>

using namespace std;

void main()
{
int * ip_a;
int * ip_b;

ip_a = (int*)malloc( sizeof (int) * 5 );
for( int i = 0; i < 5; i++ )
{
   cin>>ip_a[i];
}
for( int j = 0; j < 5; j++ )
{
   cout<<ip_a[j]<<" ";
}

ip_b = ( int* )calloc( 5, sizeof(int) );
for( int j = 0; j < 5; j++ )
{
   cout<<ip_b[j]<<" ";
}

}

這個輸出就能夠清晰的看出他們的不同....

++版:

三個函數的申明分別是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t numElements, size_t sizeOfElement);
都在stdlib.h函數庫內

它們的傳回值都是請求系統分配的地址,如果請求失敗就返回NULL

malloc用於申請一段新的地址,參數size為需要記憶體空間的長度,如:
char* p;
p=(char*)malloc(20);

calloc與malloc相似,參數sizeOfElement為申請地址的單位元素長度,numElements為元素個數,如:
char* p;
p=(char*)calloc(20,sizeof(char));
這個例子與上一個效果相同

realloc是給一個已經分配了地址的指標重新分配空間,參數ptr為原有的空間地址,newsize是重新申請的地址長度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

注意,這裡的空間長度都是以位元組為單位。

C語言的標準記憶體配置函數:malloc,calloc,realloc,free等。
malloc與calloc的區別為1塊與n塊的區別:
malloc調用形式為(類型*)malloc(size):在記憶體的動態儲存裝置區中分配一塊長度為“size”位元組的連續地區,返回該地區的首地址。
calloc調用形式為(類型*)calloc(n,size):在記憶體的動態儲存裝置區中分配n塊長度為“size”位元組的連續地區,返回首地址。
realloc調用形式為(類型*)realloc(*ptr,size):將ptr記憶體大小增大到size。
free的調用形式為free(void*ptr):釋放ptr所指向的一塊記憶體空間。
C++中為new/delete函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.