C语言局部变量地址泄漏:为何代码可以正常编译却暗藏风险?
这段代码能够编译并运行是因为C语言并没有规定在函数结束后局部变量所占用的内存空间会被清空。这意味着在函数结束后,虽然'i'已经超出了作用域,但它所占用的内存空间仍然存在,直到该空间被其他变量覆盖。
因此,在'escape'函数中创建一个指向'i'的指针'p',然后返回该指针,实际上是将'i'的地址传递给了调用者。在调用'crash'函数时,它通过指针'q'访问了已经超出作用域的'i',这导致了未定义的行为,通常会导致程序崩溃。
虽然这段代码能够编译并运行,但是它是非常危险的,因为它会导致未定义的行为。在实际编程中,应该避免使用类似的代码。
原文地址: https://www.cveoy.top/t/topic/ojD6 著作权归作者所有。请勿转载和采集!