当我们释放动态分配的内存时,通常会遭遇内存释放失败的错误,我遇到这么一个问题,当我无意间越界访问了动态分配内存时,在释放内存时,就会出现Access violation writing的错误,但我不太确定是不是由于这个原因引起的错误,希望高手解释一下,引起free失败的常见原因
2 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
使用free(ptr)释放ptr指向的内存时并不需要提供要释放内存的大小,这是因为在ptr附近的某个位置存放有维护该内存区域的数据,这是由内存申请函数 malloc 等产生的。实际上在ptr之前有个结构体,指示了该块内存的信息。如果你的程序因为内存越界内修改了这个结构体,则会导致free函数出错返回,并不释放任何内存。
其他出错情况也大多由于类似原因,比如传递了错误的指针,该指针已经被释放或与空闲空间中的某个区块重叠等。
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
free()函数释放内存失败通常有两个原因:
1.重复释放;
2.想释放不是由该进程分配的内存.
重复释放就是指针指向的内存已经释放了,再次调用free()函数去释放它.
释放不是由该进程分配的内存时有可能会造成异常,通常比如说一个程序调用DLL里面的函数,该函数分配了内存,而调用者去释放该内存就有可能造成异常(此时应该在DLL里面提供一个函数专门来释放分配的内存)
添加回答
举报
0/150
提交
取消
