<分区>
我有一个代码不应该工作,但它工作。你能告诉我为什么吗?
#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
指向由 f()
复制的 main 上的指针, 然后当 main()
执行 f()
应该删除所有局部变量然后继续,所以 a
应该指向垃圾桶,或者什么都没有,但它没有并指向 5,值 already deleted b
.
究竟发生了什么?为什么这段代码有效?