malloc和new的区别

1、malloc()函数

       malloc的全称是memory allocation,中文叫动态内存分配,在stdlib.h中声明。

     原型: void *malloc(size_t  size); 

     说明:分配长度为size字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。        1、在使用之前一定要检查返回的指针是否为空指针

     2、不使用的话一定要用free释放掉。

        另外: void *calloc(size_t  num_elements)

                     void *realloc(void *ptr,size_t new_size)
     calloc也用来分配内存,与malloc的主要区别有 1:calloc在返回指向内存的指针的之前把它初始化为0。2:请求内存的数量的方式不同,calloc 的参数包括所需元素的数量和每个元素的字节数,根据这些能够计算出总共需要的内存。
       realloc函数用来修改一个原先已经分配的内存大小,可以缩小也可以扩大。

示例:

/*本程序从标准输入读取数据,存入一个数组并且把数组个数存入第一个元素,
后面是输入的数值*/

#include <stdio.h>
#include <malloc.h>

#define NUM 100;

int * readints()
{
	int *array; /*存储输入数字的数组*/
	int size; /*数组大小*/
	int count;/*实际输入数字的个数*/
	int value;/*输入数字的值*/
/*初始分配内存*/
	size=NUM;
	array=(int*)malloc((size+1)*sizeof(int));
	if(array==NULL)
		return NULL;
/*读取输入的数据,并根据读入的数据扩大内存*/
	count=0;
	while(scanf("%d",&value)==1)
	{
		count+=1;
		if(count>size)
		{
			size+=NUM;
			array=(int*)realloc(array,(size+1)*sizeof(int));
			if(array=NULL)
				return NULL;
		}
		array[count]=value;
	}
/*释放没有使用的内存,此处不能用free,否则array会全部释放掉*/
	if(count<size)
		{			
			array=(int*)realloc(array,(count+1)*sizeof(int));
			if(array=NULL)
				return NULL;
		}
	array[0]=count;
	return array;
}

你可能感兴趣的:(C++,c,malloc,new)