为什么需要动态开辟内存?
例如:
char cdata[128] = "hello";
这样则会造成内存浪费,所以我们需要动态开辟内存空间。
malloc 函数原型 void *malloc(size_t size),C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
用法如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p; // 这时候的p称为野指针,悬挂指针(野指针是没有具体的内存指向的)
p = (char *)malloc(1); // p有了具体的内存指向
*p = 'c';
free(p); // 使用完需要使用free 释放内存空间
p = NULL;
return 0;
}
如果动态开辟的内存不够 用怎么办?此时希望实现内存扩容
realloc:可以实现内存扩容,函数原型 void *realloc(void *ptr, size_t size),C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
具体用法如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p;
p = (char *)malloc(12); // 动态开辟内存空间
if(p == NULL){ // 判断开辟内存空间是否失败
printf("malloc error\n");
exit(-1);
}
int len = strlen("hello12134564564646546466464545646546465");
int newLen = len - 12 + 1;
realloc(p, newLen); // 扩容
printf("扩容后地址:%x\n", p);
strcpy(p,"hello12134564564646546466464545646546465"); // 复制内容到P
puts(p); // hello
puts("end");
return 0;
return 0;
}