gpt4 book ai didi

c - 指向(不应该)不再存在的变量的指针

转载 作者:行者123 更新时间:2023-11-30 16:58:10 26 4
gpt4 key购买 nike

我想讨论以下代码:

#include <stdio.h>

int main () {

int i;
int * ptr ;

for ( i = 0; i < 3; ++i ){
int tmp = 1;
ptr = &tmp;
}

printf ("%d\n", *ptr);

return 0;
}

据我所知,每次执行for循环时都会创建一个新变量tmp,然后将其销毁。结果,最后指针ptr不能再先验指向包含整数值1的内存区域(因为它可能已被删除) ,或被新数据覆盖)。另一方面,我在许多系统上多次执行该代码,并且它总是有效。问题:由于使用的操作系统/编译器,这基本上是巧合吗?期望 *ptr 为 1 通常是错误,对吗?

我对这个简单的问题表示歉意,但我相信答案会让我更好地理解为什么我编写的更复杂的代码不起作用并产生段错误错误(与本文中的代码相比,它是与依赖指针 ptr 始终“定义良好”相同)。

最佳答案

第一:你的理解是正确的

第二:尝试在编译器优化标志打开的情况下使用发行版本中的代码。您很可能会得到核心转储

也有可能,由于您的代码非常小,您访问的运行时内存实际上属于您的可执行文件。大程序/库中的这段代码应该立即崩溃。

关于c - 指向(不应该)不再存在的变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066727/

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