以下内容是关于free失败的例子,麻烦大佬帮忙看看~

当我们释放动态分配的内存时,通常会遭遇内存释放失败的错误,我遇到这么一个问题,当我无意间越界访问了动态分配内存时,在释放内存时,就会出现Access violation writing的错误,但我不太确定是不是由于这个原因引起的错误,希望高手解释一下,引起free失败的常见原因

潇湘沐
浏览 550回答 2
2回答

小唯快跑啊

使用free(ptr)释放ptr指向的内存时并不需要提供要释放内存的大小,这是因为在ptr附近的某个位置存放有维护该内存区域的数据,这是由内存申请函数 malloc 等产生的。实际上在ptr之前有个结构体,指示了该块内存的信息。如果你的程序因为内存越界内修改了这个结构体,则会导致free函数出错返回,并不释放任何内存。其他出错情况也大多由于类似原因,比如传递了错误的指针,该指针已经被释放或与空闲空间中的某个区块重叠等。

慕尼黑的夜晚无繁华

free()函数释放内存失败通常有两个原因:1.重复释放;2.想释放不是由该进程分配的内存.重复释放就是指针指向的内存已经释放了,再次调用free()函数去释放它.释放不是由该进程分配的内存时有可能会造成异常,通常比如说一个程序调用DLL里面的函数,该函数分配了内存,而调用者去释放该内存就有可能造成异常(此时应该在DLL里面提供一个函数专门来释放分配的内存)
打开App,查看更多内容
随时随地看视频慕课网APP