c - 是否允许对不再拥有的数组执行指针运算?

标签 c

考虑

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/

相关文章:

c - LDMIA 指令导致损坏的寄存器数据

编译可加载内核模块(Debian/Ubuntu)

c - 在 C 中实现 shell 并需要帮助处理输入/输出重定向

c - 在 C 中没有出现段错误

c - 尝试在 C 中将二维数组作为参数传递

C Libmcrypt 无法加密/解密成功

c - 使用 libtrace 的 C 代码中的段错误

C Primer 加上第 6 章练习 3

c - AVR-GCC Makefile 链接问题

c - 不同{结构的 "if"句子之间的区别