我有一个不应该工作的代码,但它可以工作。你能告诉我为什么吗?
#include <iostream>
void f ( int** a, int b ) ;
int main (void) {
int ** a ;
a = new int* () ;
f(a,5) ;
std::cout << **a << std::endl ;
return 1 ;
}
void f ( int** a, int b ) {
*a = &b ;
}
我声明了一个指向名为 的指针a,我分配了一个指向它的指针,然后将它传递给f(). 另一个f()参数是常量文字,因此它应该没有在 中分配静态内存,因此它不main()应该存在于f(). 在里面f()我将局部变量的内存方向分配b给指向 main 复制的指针的指针f(),然后在main()执行时f()应该删除所有局部变量然后继续,所以a应该指向垃圾,或者什么都没有,但它没有并指向5、已经删除 b的值。
真的会发生什么?为什么这段代码有效?