3.calloc
分配并使用零初始化连续内存空间
标准格式: void* calloc (size_t num , size_t size);
实例:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n = 0;
int *ip = NULL;
scanf("%d",&n);
ip = (int*)calloc(n,sizeof(int));
if(NULL == ip) exit(1); // 使用ip指向的堆内存空间
free(ip); // 空悬指针
ip = NULL;
return 0;
}
4.realloc
重新分配内存块
标准格式: void * realloc(void* ptr , size_t size);
实例:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n = 5 , m = 10;
int i = 0;
int *ip = (int*)malloc(sizeof(int)*n);
if(NULL == ip) exit(EXIT_FAILURE);
for(i = 0; i < n; ++i){
ip[i] = i + 10;
}
ip = (int*)realloc(ip,sizeof(int)*m);
if(NULL == ip) exit(EXIT_FAILURE);
for(i = 0; i < m; ++i){
printf("%d",ip[i]);
}
printf("\n");
free(ip);
ip = NULL;
return 0;
}
realloc 函数调整内存大小分为3种情况:
1.后续未分配内存空间足够大,可以分配空间
2.后续未分配内存空间不足够大,不能分配空间
3.堆内存不足,扩展空间失败,realloc 函数返回NULL