用g++写了一个程序, 其中有一段是
for( i = 0 ; i< 5; i++)
push_back();
这段代码被调用了N次, 当调用一定次数后, 执行到push_back时报上面的错误, 用gdb挨个看, 最终进入 malloc.c里, 报错如下
malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted
初步怀疑是内存泄漏, 网上说是堆空间不足了.
调试半天, 无果, 最好找以前的程序对比, 发现错误原因在
我在定义结构体时,喜欢关闭 内存对齐
#pramga pack ( push, 1 )
...定义结构体
#pargma pack ( pop ) //这句忘写了
后面的事情就发生了