1

我遇到了某种指针冲突,

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

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

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

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

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

这里发生了什么?

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

4

1 回答 1

4

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

于 2011-05-12T15:38:46.207 回答