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到该指针?
每次通话都new 必须与相应的通话相匹配delete.
顺便说一句,你应该考虑使用std::string甚至std::vector<char>(取决于具体情况),而不是尝试自己分配char数组.那你就不用担心了.
当你说"那个指针"时,重要的是要理解"那个指针"的值会随着每次分配而改变.在一次分配之后,也许它是0x100234,并且在下一次分配之后,它是0x104234.这意味着如果你重新指定一个新地址(一个新的内存块)指针而不释放(删除[])旧块,你将在进程的持续时间内泄漏内存.
这会导致内存从之前的"新"语句中分配出来吗?
是的,这称为内存泄漏.
IE,每个新语句是从OS接收另一块HEAP内存,还是只是重新分配?
它是堆中的新内存块.
假设我做了最后删除指针[]; 是否会释放我通过new分配给指针的任何和所有内存?
如果你"删除[]指针;",它将释放它指向的内存.只有来自最后一个"new char []"调用的内存.