之前调试一个程序的时候,启动过程中发现一个奇怪现象,运行信息如下:
部分问题摘录如下:
sysmalloc: Assertion '(old_top == (((mbinptr) (((char *) &((av)->bins[((1)-1)*2]))..........'
这个bug首次遇到,通过查找资料和代码分析,出现这个问题的可能性还是指针的错误使用上,比如你定义了一个指针指向一个数组,但操作指针的时候越限了,结果导致的后果可能就是:
1:直接segment err
2:栈错误
这个总结并不全面,实际的内存出错可能较多,可以参照我的另外一片文档C中常见的与内存有关的错误.md”,会对各种溢出有比较详细说明。
此处我理解可能是:指针虽然飞了,但还是指向了堆数据区,只是超越了本进程的地址空间,就会出现这个问题
后面分析代码,在协议初始化的地方,果然发现了地址复制溢出的问题,如下:
此处地址拷贝的时候,拷贝的size错了,内容也不对,导致堆空间赋值数据不正确,将标红地方修改过来接口