考虑
int main()
{
char* p = malloc(5);
printf("%td", &p[5] - &p[0]); /*one past the end is allowed*/
free(p);
printf("%td", &p[5] - &p[0]); /*I no longer own p*/
}
是否定义了这段代码的行为?是否允许对不再拥有的数组执行指针运算?
最佳答案
是的,您通常可以在许多环境中的许多编译器上这样做。
然而,您必须记住,ISO C 标准在您执行此操作时对您的语言没有任何要求:它没有定义行为任何使用一个值为“不确定”的指针。根据 ISO C,free(p)
之后的 p
的值基本上与未初始化的状态相同。
关于c - 是否允许对不再拥有的数组执行指针运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144411/