我有一个不应该工作的代码,但它可以工作。你能告诉我为什么吗?
#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
的值。
真的会发生什么?为什么这段代码有效?