【无标题】内存分配

这篇博客介绍了C语言中动态内存分配函数malloc和释放内存的free操作。通过示例展示了如何使用malloc分配空间,并用memset清空内存,以及如何进行字符串和数组的复制。同时,强调了忘记释放内存可能导致的内存泄漏问题,并提供了释放内存的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         以前,我们定义的变量(局部变量和全局变量),他们的空间分配和释放都是系统维护的。

         那我们如何自己分配空间呢?

头文件:#include<stdlib.h>

void *malloc(int size)    作用:分配一片连续的空间。

size:可以自己指定空间大小,以B为单位。

返回值是一个指向空间的指针。

例:

char *s2="hello world";

char *s1=malloc(16 );

printf("%s\n",s1);

注意:由于malloc会在内存空间中分配一片空间,空间内容随机

建议分配后,立即使用memset清空。

memset用法:void memset(void *ptr,int val,int size);

//ptr:这片空间首地址。           size:这片空间长度。           val:你想给这片空间赋的值。

头文件:#include<string.h>

释放空间:void free(void *ptr);

ptr:指向这片空间的指针。

例:

free(ps1);

free(p2);

内存泄漏:如果你把malloc的指针丢失了,那你再也找不到这片空间,那就说这片空间泄露了。

下面是他在实例中的应用。

#include<stdio.h>
#include <stdlib.h> 
#include <string.h> 
int main() 
{ 
printf("###########string copy show ##############\n");	
char *s2="hello world!";   
char *ps1 = malloc(  16 );	
memset(ps1,0 , 16);
char *s1=ps1;	
while(*s2!='\0'){		
*s1=*s2;		
s1++;		
s2++;	
}	
printf("%s\n",ps1);	
printf("########### array copy show #################\n");	
int aa[] = {1,2,3,4,5,6,7};	
int *pa=malloc(  sizeof(aa)  );	
memset(pa,0,sizeof(aa));	
for(int i=0; i<   sizeof(aa) / sizeof(aa[0])  ; i++) 
{pa[i]=aa[i];	}	
for(int i=0;i<17;i++){		printf(" %d ",pa[i]);	}	
printf("\n");	
int dd;	pa = &dd	
printf("################ free ################\n");	
free(ps1);	//free(ps1);  	
free(pa);	
return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值