Sar*_*rah 2 c++ pointers memory-leaks
#include <iostream>
using namespace std;
int main()
{
int* pointer = new int[5];
pointer = new int [10];
delete[] pointer;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为指针分配了新的内存后,长度为5的旧内存会发生什么情况呢?如果是内存泄漏,我应该使用 realloc() 代替吗?
我希望你想象一下下面场景中的自己
pointer变量。new。new,如果你愿意的话。那是内存泄漏。
可以通过多种方式规避它。
std::vector为例)是的,你有内存泄漏。一个明目张胆的。delete[]您可以通过在要求更多之前返回内存来解决此问题。您可以通过使用多个指针并同时管理它们来解决此问题。您可以使用智能结构(例如智能指针)来解决该问题,以协助生命周期管理。或者你可以做现代 C++ 程序员所做的事情:使用RAII策略让代码和智能容器主要管理事情为您管理事务。
至于realloc……只是不要。realloc是一种用于调整缓冲区大小(甚至在需要时分配缓冲区)的 C 机制。但它对存储在其中的复杂实体的特征一无所知。未能正确地构建和破坏如此复杂的对象会带来灾难,这将在后面提到。
从长远来看,接受用不同的语言、不同的模式和方法进行编程的概念。C 没有像std::vector;这样的所有这些神奇的容器。你做。C 没有智能指针;你做。等等。尽早并经常拥抱这一点。它会在未来多次收回成本。