free出错

void free(void *ptr)

Description

The C library function void free(void *ptr) deallocates the memory previously allocated by a call to calloc, malloc, or realloc. 务必牢记,该函数释放的是指针指向的内存空间,而不是释放掉指针。

Example

struct DetectRes
{
    float x_start;
};

int main()
{
	struct DetectRes *objects;
	objects = (struct DetectRes*)malloc(3 * sizeof(struct DetectRes));
    
    for (int i = 0; i < 3; i++)
    {
        objects->x_start = i + 1;
        objects++;
    }
	
	free(objects);
	objects = NULL;
	
	return 0;
}

上述代码是会出现错误的,即使在malloc的时候分配比 3 * sizeof(struct DetectRes) 更大的空间也于事无补。原因在于在使用
free() 的时候,objects指针已经不指向原来的位置了。

对与 free() 出错,一般是下列几种情况:

  • 1、malloc 与 free 配套使用,不要跨进程分配和释放。
  • 2、指向 malloc 申请的堆内存的指针,在运用过程中千万不要另外赋值,否则同样导致内存泄露。
  • 3、使用 malloc 后,实际使用时指针长度超过了你申请的范围,再使用 free 时肯定是会出问题的。
  • 4、改变指针的初始指向地址。(上述代码的错误)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值