以下代码在我的计算机(Mac OS X Yosemite 64 位架构)上生成了此输出:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int *p = malloc(sizeof(int));
*p = 5;
int *q = p;
q = *(p + 1);
printf("p is %p\n", p);
printf("q is %p\n", q);
return 0;
}
输出:
p is 0x7f8f49404c90
q is 0xffffffffb0000000
第二个指针是一个相当大的数字,所以我想知道这是缓冲区溢出是否正确。
最佳答案
int *p = malloc(sizeof(int));
分配的内存只能容纳一个整数。
您已经在这样做
*p = 5;
现在您正在增加指针
(p+1)
这是您尚未分配的内存位置。现在您正尝试读取存储在 (p+1) 中的数据,这将导致您提到的未定义行为,这是缓冲区溢出。
*q = *(p+1)
然后尝试将此值分配给 *q
这可能会导致崩溃。
关于c - 这是缓冲区溢出的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119982/