gpt4 book ai didi

c - 使用未分配的地址是否合法?

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:20 25 4
gpt4 key购买 nike

我不太了解内存分配的实际工作原理,但这会带来什么问题:

int main(){
int a=1;
int *p = &a;
p++;
*p = 2;
printf("%d", *p);

return 0;

}

最佳答案

通常它会产生未定义的行为,通常会导致内存访问冲突。

但是,在您的示例中,它可能工作正常,因为变量 p 可能紧跟在堆栈中的变量 a 之后(取决于您正在使用的编译器) ,因此通过增加变量 p 的值,您实质上是将其设置为指向自身。

现在,如果 sizeof(p) == sizeof(*p),即如果 sizeof(int*) == sizeof(int),这恰好许多编译器都是这种情况(两者都等于 4),那么当您将值写入 p 指向的地址时,您同时设置了 p *p 到那个值。

请注意,任何后续尝试将值写入 p 指向的地址,都等同于将值写入程序内存空间中的地址 2,而这次 < strong>将很可能导致内存访问冲突。

关于c - 使用未分配的地址是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23046028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com