天天看點

動态開辟記憶體的三種方式

malloc (size)//申請長度為size的動态記憶體空間

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#pragma warning(disable:4996)

int main(){

int num = 0;

scanf("%d", &num);

int *ptr = NULL;

ptr = (int*)malloc(num*sizeof(int));//開辟動态空間

if (NULL != ptr){//判斷開辟動态空間是否成功

//if語句内是使用動态記憶體的操作

//int i = 0;

//for (i = 0; i < num; i++){

// *(ptr + i) = 0;//賦零操作

//

//}

}

free(ptr);//釋放掉動态記憶體,防止發生記憶體洩漏

ptr = NULL; //使野指針不開懸垂,有效避免錯誤

system("pause");

return 0;

}

calloc (num,size)//為num個大小為size的元素開辟一個空間,并将記憶體的所有位元組預設置零

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#pragma warning(disable:4996)

int main(){

int *p = calloc(10, sizeof(int));//calloc申請的動态記憶體空間會預設 //将空間内的所有位元組初始化為0

if (NULL != p){

//使用空間

}

free(p);//釋放動态記憶體空間

p = NULL;//是指針不再懸垂

system("pause");

return 0;

}

realloc //對動态開辟得記憶體大小進行調整,使得動态記憶體管理更加靈活

realloc(ptr,size)//将記憶體位址為*ptr的記憶體進行調整,調整後的新大小為size

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#pragma warning(disable:4996)

int main(){

int *ptr = malloc(100);

if (ptr != NULL){

//當記憶體開辟成功時,進行使用

}

else{

exit(EXIT_FAILURE);//報錯,使用的是C語言中預設的函數

}

//擴充容量

int*p = NULL;

p = realloc(ptr, 1000);

if (p != NULL){

ptr = p;//擴充完空間後,将ptr指向新的空間

}

free(p);//釋放動态記憶體

system("pause");

return 0;

}