动态开辟内存的三种方式



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;
}

猜你喜欢

转载自blog.csdn.net/sd116460/article/details/80513831