C语言内存泄漏越界释放问题总结

最近在改一个纯c的算法,遇到了很多内存泄漏,访问越界等问题,这种问题只要出现就是段错误,很头疼。

我是通过vargrind解决了大部分的内存错误问题。

这是使用方法,我就贴一下,大家看一下。

https://blog.csdn.net/stpeace/article/details/61622214

https://blog.csdn.net/liu0808/article/details/79046022

下面我总结一下我遇到的内存错误,以及怎么解决

1,内存访问越界

这种错误有的时候并不是在你访问越界的时候才会报错,这个我也不知道为什么,现象是这样,会在你释放内存的时候出现段错误,好在这个错误,vargrind会帮你定位,报错信息类似于:

Invalid write of size 1
==20683==    at 0x406477: main (main.c:293)
==20683==  Address 0x55743c5 is 12 bytes after a block of size 361 alloc'd
==20683==    at 0x4C2DBB6: malloc (vg_replace_malloc.c:299)
==20683==    by 0x405160: new_cvector (matrix.c:299)
==20683==    by 0x40510A: copy_cvector (matrix.c:287)
==20683==    by 0x406370: main (main.c:283)

这个报错的意思是你访问了一个361大小的内存块的后面12个内存,这就是越界了,需要查一下你的数组尺寸

2,内存释放的时候段错误

free(ptr)的作用如下:

如果指针内存释放了,那么这部分的值有几种可能

1,还是原来的值

2,被清空为0,取决于平台和编译器的处理

3,被别人分配去了,已经修改了值

内存在释放之后,最好将指针置为空,如果不是空,那么你用该指针访问,那么会出现段错误

3,malloc内存不要重复申请

我在调用一个函数的时候,将二级指针传入,在函数内存malloc了一级数组的内存,然后在函数外又maloc了,这样也会导致段错误

只是我遇到的我写下了,不是专门做c的,遇到了,就写一下,希望能帮到大家,欢迎留言讨论

猜你喜欢

转载自blog.csdn.net/qq_31638535/article/details/81289085
今日推荐