c语言动态内存管理

it2024-09-27  58

注意点: 1.每次动态开辟空间之后 记得判断下新空间是否为空 2.free只对动态开辟的空间使用 3.动态开辟的内存空间一定要释放 如果忘记释放动态开辟的内存空间会造成内存泄漏 malloc (动态内存开辟函数) 申请的空间是连续可用的返回指向这块空间的指针

void *malloc(size_t size); //返回值类型是void* 所以malloc函数不知道开辟空间的类型,需要使用者自己决定 //如果size_t为0,malloc的行为是未定义的,取决于编译器

free(释放动态内存)

void free(void* ptr); //若参数ptr指向的空间不是动态开辟的,那free函数行为未定义 //若参数ptr是NULL指针,则函数什么事都不做

举例

int num=0; scanf("%d",num); int *ptr = (int*)malloc(num*sizeof(int)); free(ptr); ptr = NULL; //释放之后将指针置为空

calloc(为num个大小为size的元素开辟一块空间,并且将此空间每个字节初始化为0)

void* calloc(size_t num,size_t size); //返回地址之前就把申请的空间每个字节初始化为0

举例

int *p = calloc(10,sizeof(int)); free(p); p = NULL;

realloc

void* realloc(void* ptr,size_t size) //ptr是要调整的内存地址 //size是调整之后的新大小 返回值为调整之后的内存起始位置
最新回复(0)