在C++中通过"new"重新分配内存

BSc*_*ker 9 c++ memory-management new-operator

关于C++内存管理的快速问题

如果我执行以下操作:

pointer = new char [strlen(someinput_input)+1];
Run Code Online (Sandbox Code Playgroud)

然后再次执行它,可能会返回不同的结果strlen(someinput_input).

这是否会导致从前一个" new"语句中分配内存?如在,每个new语句是从OS接收另一块HEAP内存,还是只是重新分配?

假设我做了最终的delete pointer[];遗嘱,将我曾分配过的任何和所有内存释放new到该指针?

Dea*_*ing 9

每次通话都new 必须与相应的通话相匹配delete.

顺便说一句,你应该考虑使用std::string甚至std::vector<char>(取决于具体情况),而不是尝试自己分配char数组.那你就不用担心了.

  • 每次调用new []都必须与delete []匹配 (7认同)

war*_*enm 7

当你说"那个指针"时,重要的是要理解"那个指针"的值会随着每次分配而改变.在一次分配之后,也许它是0x100234,并且在下一次分配之后,它是0x104234.这意味着如果你重新指定一个新地址(一个新的内存块)指针而不释放(删除[])旧块,你将在进程的持续时间内泄漏内存.


Ste*_*hen 6

这会导致内存从之前的"新"语句中分配出来吗?

是的,这称为内存泄漏.

IE,每个新语句是从OS接收另一块HEAP内存,还是只是重新分配?

它是堆中的新内存块.

假设我做了最后删除指针[]; 是否会释放我通过new分配给指针的任何和所有内存?

如果你"删除[]指针;",它将释放它指向的内存.只有来自最后一个"new char []"调用的内存.