我得到某种指针碰撞,
基本上,在我做的一个功能中,
a = calloc(1,28); // gives me 0x100100d10
然后很快就在我做的子功能中,
b = calloc(1,16); // gives me 0x100100d20;
第一个地址+ 28是0x0..d2C,即扩展到第二个calloc中提供的指针...
这是怎么回事?
指针值来自printf,而不是gdb。
答案 0 :(得分:4)
如果您正在描述这种情况,那么您通过在已分配块的边界外写入(或者甚至使用未初始化的指针或指向已释放内存的指针)来破坏堆,从而调用未定义的行为。工具valgrind可能可以帮助您跟踪问题,或者如果您的程序不是太大,您只需手动搜索无效指针使用。