malloc():函数接受一个参数,参数为所需的内存字节数,malloc()函数会分配适宜的空闲的内存空间,但是不会为其赋名,返回值为指向void的指针指向内存首地址,如果分配内存失败,将返回空指针。
函数原型:void *malloc(size_t,size)
malloc()函数可以用指针进行承接:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *p;
p = (char *)malloc(1);
*p = 'c';
printf("%c\n",*p);
return 0;
}
字符串拷贝:strcpy函数原型:char *strcpy(char *dest,const char *src)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *p;
p = (char *)malloc(1); //p指向内存为1字节的内存空间
*p = 'c';
p = (char *)malloc(12); //p指向内存为12字节的内存空间
strcpy(p,"hello");
printf("%c\n",*p);
return 0;
}
p指向malloc()12个字节的内存时,1字节的悬挂无用,不能找到该地址,通常用free()释放掉,malloc()在堆上开辟内存空间,堆只有在程序结束后才释放;数组普通的内存空间在栈开辟空间,函数调用结束后会清理栈的数据回收内存。
如果用while循环不停malloc有可能会耗尽计算机堆上的内存。
free():函数原型:void free(void *ptr)释放之前调用calloc、malloc、realloc所分配的内存。内存空间保存在*ptr中,可在malloc后再free(p),让p回归到野指针。
扩容:realloc:函数原型:void *realloc(void *ptr,size_t size)。扩容地址+增大多少。
realloc()函数尝试重新调整之前malloc或calloc所分配的ptr所指向的内存块的大小。
memset:函数原型:void *memset(void *str,int c,size_t)。内存指针+数据+大小
例如:把p内存初始化成‘/0’
memset(p,'/0',12);