以前,我们定义的变量(局部变量和全局变量),他们的空间分配和释放都是系统维护的。
那我们如何自己分配空间呢?
头文件:#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;
}