/malloc函数(动态开辟内存空间)
函数原型voidmalloc(size_t size)
c库函数void*malloc(size_t size)分配所需的内存空间,并返回一个指向它的指针
size_t是一个正整数,size开辟多大的空间
当重新用malloc开辟新空间后指针指向该新空间,前边用malloc开辟的空间悬空,需要用free释放内存空间
malloc是在堆上边开辟空间,只有在程序结束后才会释放空间;
数组是在栈上边开辟的临时空间
/
/realloc函数
函数原型voidrealloc(voidptr,size_t size)扩容
C库函数voidrealloc(voidptr,size_t size)尝试重新调整之前调用malloc或calloc所分配的ptr所指向的内存块大小
/
/
free函数
c库函数void free(void*ptr)释放之前调用calloc\malloc或realloc所分配的内存空间
释放防止内存泄露,防止悬挂指针——野指针的一种。
拷贝strcpy——charstrcpy(chrdest,const charsrc)
const charsrc意思是从哪里拷贝,chr*dest是拷贝到哪里去
扩容realloc——函数原型voidrealloc(voidptr,size_t size)—
void*ptr需要扩容的地址,size_t size增大多少
尝试重新调整之前调用malloc或calloc所分配的ptr所指向的内存块大小
NULL——用于将指针悬空(不指向任何位置)——当被需要时能转换成所需的任何类型的指针
memset 函数
函数原型voidmemset(voidstr,int c,size_t n)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//char *strcpy(char* dest, const char *src);
int main()
{
char *p;//野指针
p = (char *)malloc(1);//p有了具体的内存指向
*p = 'c';
free(p);//动态开辟后重新指向,记得释放。不然存在内存泄露的风险
p = NULL; //free之后让指针指向NULL,防止悬挂指针
p = (char *)malloc(12); //开辟12字节的内存空间
if(p == NULL){ //通常养成习惯对malloc返回值做NULL判断,申请失败了
printf("malloc error\n");
exit(-1);
}
memset(p,'\0',12); //内存空间初始化
printf("扩容地址:%x\n",p);
int len = strlen("gebilaowang2233445566778899");
int newLen = len - 12 + 1;
p = realloc(p,newLen); //扩容
printf("扩容后地址:%x\n",p);
strcpy(p,"gebilaowang2233445566778899");
puts(p);
puts("end");
return 0;
}