内存的动态分配(malloc函数)和大小调整(realloc函数)详解

内存的动态分配和大小调整

头文件

所需头文件:stdlib.h

动态分配

  • 函数:void *malloc(size_t size)

  • 函数作用:申请大小为(size_t size)的动态内存,然后返回首地址。

  • 注:由于函数返回的是void型指针,所以需强制转换为所需类型指针

  • //申请4个大小为int类型的内存 
    #include
    #include
    int main()
    {
    	int *pt;
    	pt=(int*)malloc(4*sizeof(int));		//申请内存
    	if(pt!=NULL)
    		printf("success");			//判断是否申请成功
    	return 0;
    }
    

大小调整

  • 函数:void *realloc(void *ptr, size_t size)

  • 函数作用:修改申请的动态内存ptr所管理的字节数,然后返回首地址。

  • //申请4个大小为int类型的内存,再将申请的内存改为10个int大小 
    #include
    #include
    int main()
    {
    	int *pt;
    	pt=(int *)malloc(4*sizeof(int));		//申请内存
    	if(pt!=NULL)
    		printf("success\n");			//判断是否申请成功
        if(realloc(pt,10*sizeof(int))!=NULL)
            printf("SUCCESS!");
    	return 0;
    }
    

释放内存

  • 函数:void free(void *ptr)

  • 函数作用:释放所申请的动态内存.

  • //申请4个大小为int类型的内存,再释放
    #include
    #include
    int main()
    {
    	int *pt;
    	pt=(int *)malloc(4*sizeof(int));		//申请内存
    	if(pt!=NULL)
    		printf("success");			//判断是否申请成功
        free(pt);
    	return 0;
    }
    

例题:


从键盘输入一个字符串,但是字符串长度不知道。请先动态申请10个字符的内存,容量不够时再扩容10个字符,以此类推。最后输出这个字符串

#include
#include
#define N 10
int main()
{
	char *str,ch;
	int count=1,i=1,num=0;
	if((str=(char*)malloc(N*sizeof(char)))==NULL)		//先申请10个字符的内存,并判断是否申请成功 
		printf("ERROR!\n");
	while(1){
		ch=getchar();
		if(ch=='\n')	break;		//若输入的是换行符,结束循环 
		i++;
		if(i==N)
		{
			count++;
			i=1;
			realloc(str,count*N*sizeof(char));				//内存耗尽,扩大内存 
		}
		num++;  				//num记录写入字符的总数 
		*(str+num-1)=ch;
	}
	*(str+num)='\0';  		//给字符串末尾写入空字符 
	puts(str);
	free(str);			//释放内存 
	return 0;
}

你可能感兴趣的:(c++,c语言,算法)