【发布时间】:2018-04-23 16:55:39
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
main()
{
int *p = (int *)malloc(sizeof(int));
int *q = (int *)realloc(p,sizeof(int));
*p = 3;
*q = 9;
if (p == q)
printf("%d %d", *p, *q);
}
当我运行它时,它会在 GCC 中打印 9 9。 有人可以解释这段代码的行为吗?
【问题讨论】:
-
你的
realloc()调用不太可能改变指针p,所以调用相当于q = p。 -
你期待什么?
9是一个有效的整数,所以它可以是结果。 -
@IharobAlAsimi 否。成功
realloc()总是使原始指针无效。 -
在成功的
realloc()之后使用指针是未定义的行为,故事结束。 -
..请不要要求 UB 进一步解释:(
标签: c