Calloc提供一个从已经分配的内存开始的指针?

时间:2011-05-12 15:29:54

标签: c calloc

我得到某种指针碰撞,

基本上,在我做的一个功能中,

a = calloc(1,28); // gives me 0x100100d10

然后很快就在我做的子功能中,

b = calloc(1,16); // gives me 0x100100d20;

第一个地址+ 28是0x0..d2C,即扩展到第二个calloc中提供的指针...

这是怎么回事?

指针值来自printf,而不是gdb。

1 个答案:

答案 0 :(得分:4)

如果您正在描述这种情况,那么您通过在已分配块的边界外写入(或者甚至使用未初始化的指针或指向已释放内存的指针)来破坏堆,从而调用未定义的行为。工具valgrind可能可以帮助您跟踪问题,或者如果您的程序不是太大,您只需手动搜索无效指针使用。