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

标签 c calloc

我遇到了某种指针冲突,

基本上,在我做的一个函数中,

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/

相关文章:

c - 指针数组中不兼容类型的赋值 (c)

c - C 数组的大小

c - 使用空字符值的 calloc 字符数组的长度?

c - C 中的分配错误(函数或代码)和奇怪的行为

所有位 0 都可以是整数的陷阱表示吗?

c - 如何确定文件(所有内容)的大小,以便我可以立即为其分配内存?

C - getchar 和动态创建的数组

c - 如何使用 cuFFT 执行实数到复数的转换

java - 如何使用 JNI 传递和接收对象

c - 如何从文本文件中读取整数和字符并将它们存储在单独的数组中?