这是内存泄漏吗?

Ben*_*Ben 13 c++ pointers memory-leaks

char *pointer1;
char *pointer2;

pointer1 = new char[256];
pointer2 = pointer1;

delete [] pointer1;
Run Code Online (Sandbox Code Playgroud)

换句话说,我还必须这样做delete [] pointer2吗?

谢谢!

Nil*_*ert 17

不,那个代码很好,不会泄漏内存.

你只需要使用delete []一次,因为你只使用一个new来为内存分配一个区域,即使有两个指向同一个内存的指针.

  • 正确.实际上你不能** - 试图"删除"两次相同的内存块会导致未定义的行为. (12认同)
  • 还应该注意,任何依赖于"pointer2"的尝试都将导致未定义的行为. (4认同)

Nem*_*vic 7

一个简单的规则:你需要尽可能多deletenews.更好的是,使用智能指针或容器之类的东西来照顾它.

另一个小问题:pointer2一旦你打电话delete,就会变成一个"悬垂的指针" pointer1.

  • 请注意,删除后,指针1也成为悬空指针... (2认同)