free()多次的3种情况

 


#include<iostream>

int main()
{
	char* name = NULL;
	free(name);
	free(name);
	free(name);

	system("pause");
	return 0;
}
//正常运行

 


#include<iostream>

int main()
{
	char* name = (char*)malloc(10);
	free(name);
	free(name);
	
	system("pause");
	return 0;
}
//运行异常

 


#include<iostream>

int main()
{
	char* point = (char*)malloc(10);
	if (point != NULL) {
		free(point);
		point = NULL;
	}
	
	system("pause");
	return 0;
}
//运行正常

free:一次free一个指针的时候,只是清空该指针所指的堆中的对应空间,但该指针变量在栈中的值并没有没清空,它还是指向原来分配的内存空间(但是该内存空间已经不属于该指针了,CPU随时可把该指针原来所指的空间分配给任何一个指针变量)。这时,再free一次时,由于该指针已经没有堆空间与之对应了,所以编译器将会提示出错。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
多次释放(free)在编程中指的是释放已经分配的内存空间。下面是几多次释放的方法: 1. 逐一释放:首先,需要遵循先分配先释放的原则。如果对同一个指针多次调用free,会导致未定义的行为。因此,可以使用循环逐一释放已分配的内存,直到全部释放完。 2. 使用循环释放整个内存块:如果多次调用了malloc或calloc分配了连续内存块,可以使用循环进行释放。可以使用一个指针数组或者一个指针来保存每个分配的内存地址,然后使用循环语句逐一释放。 示例代码: ``` int *ptr[10]; int i; for(i = 0; i < 10; i++){ ptr[i] = (int *)malloc(sizeof(int)); } for(i = 0; i < 10; i++){ free(ptr[i]); } ``` 3. 使用realloc:realloc可以在已经分配的一块内存上重新分配新的大小。如果已经多次重新分配,可以通过调整realloc的参数来实现释放多个内存块的目的。例如,可以使用一个循环多次调用realloc,同时输入较小的大小或者NULL来释放多个内存块。 示例代码: ``` int *ptr; int i; ptr = (int *)malloc(10 * sizeof(int)); for(i = 0; i < 10; i++){ ptr = (int *)realloc(ptr, sizeof(int)); // 重新分配为更小的大小或者NULL } free(ptr); ``` 需要注意的是,在释放内存后,应将相应的指针设置为NULL,以避免产生悬空指针问题。 总之,多次释放内存时,需要注意遵循先分配先释放的原则,并使用循环语句或realloc函数来逐一或者批量释放已经分配的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值