【发布时间】:2017-10-20 15:21:16
【问题描述】:
我对下面的代码有些疑惑:
void b(int** a){
int *c = new int;
*a = c;
**a = 120;
}
int main(){
int *a = nullptr;
b(&a);
if(a)
delete a;
return 0;
}
我担心这可能会导致 UB,因为它是一个 nullptr,并且我正在更改指针地址,因为我正在获取对它的引用,但后来我开始认为这不应该是我将遇到的问题。 一些地址-> nullptr。而且这个地址是有效的,所以我可以更改它。
我多次运行此测试并启用了 -fsanitize=address,它运行良好。 但是,这是正确的吗?
【问题讨论】:
-
你有内存泄漏,但这是我能看到的唯一问题。
-
记住:双星程序员比单星程序员差,单星程序员比无星程序员差。
-
@cheers 除了three star programmers,这是最好的。
-
@BaummitAugen 这比我住过的一些酒店的星级还要多。
-
在一个有点相关的注释上,你可以
delete一个空指针(它是一个noop),不需要检查。
标签: c++ dereference