Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我遇到了某种指针冲突,
基本上,在我做的一个功能中,
a = calloc(1,28); // gives me 0x100100d10
然后很快在我做的一个子功能中,
b = calloc(1,16); // gives me 0x100100d20;
第一个地址 + 28 是 0x0..d2C,即扩展第二个 calloc 中提供的指针...
这里发生了什么?
指针值来自 printf,而不是 gdb。
如果这确实如您所描述的那样发生,那么您已经通过在已分配块的边界之外写入(或者甚至可能通过使用未初始化的指针或指向已释放内存的指针)破坏了堆,从而调用了未定义的行为。工具 valgrind 可能可以帮助您跟踪问题,或者如果您的程序不是太大,您可以简单地手动搜索无效指针的使用。