我遇到了某种指针冲突,
基本上,在我做的一个函数中,
a = calloc(1,28); // gives me 0x100100d10
然后很快在我做的一个子函数中,
b = calloc(1,16); // gives me 0x100100d20;
第一个地址 + 28 是 0x0..d2C,即扩展了第二个 calloc 中提供的指针...
这是怎么回事?
指针值来自 printf,而不是 gdb。
最佳答案
如果这确实如您所描述的那样发生,那么您已经通过在分配 block 的边界之外写入(或者甚至可能通过使用未初始化的指针或指向已释放内存的指针)破坏了堆,从而调用未定义的行为。 valgrind 工具可能可以帮助您追踪问题,或者如果您的程序不是太大,您可以简单地手动搜索无效指针的使用。
关于Calloc 提供一个从已分配内存内部开始的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980482/