以近期程序free导致coredown。
指针非空,不得其解,一般情况下free不可能出错的。开始以为是内存越界,无果。后来才发现低层队列了取结点有误,导致取出的不是地址首指针。
gdb core显示:free(): invalid pointer。对此情况进行总论。
出现此情况的最终原因是因为free(p), p是非法指针。
p = malloc, p地址前面还有个malloc_chunk结构体。程序执行过程中malloc_chunk被破坏,也可能是p指针之前本来就没有malloc_chunk结构体。
malloc_chunk不正确,可能原因如下:
1。 其它地方内存越界,导致malloc_chunk被破坏。
2。 p = malloc, p++, free(p),此时p并非地址首指针, 之前本来就没有 malloc_chunk,故free会出错。
free非空指针出错只可能与malloc_chunk有关了??是吧,呵呵