delete []是否释放整个内存块?

URL*_*L87 6 c++ arrays char delete-operator

考虑以下:

char* msg = new char[20]; 
msg[4] = '\0'; 
delete[] msg; 
Run Code Online (Sandbox Code Playgroud)
  1. 是否已经delete[] msg分配了所有20个字符msg或仅仅是那些\0
  2. 如果它仅解除分配\0,我怎么强制它删除整个内存块?

NPE*_*NPE 10

在你的问题的原代码有不确定的行为,因为你用deletenew[].

我注意到,你已经通过更换固定它delete具有delete[]:

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

这是正确的,并将释放已分配的所有内存new[].

没有"删除直到\0"或任何其他此类"部分"删除的概念.只有/ 可以删除分配了/的完整块,因此您的代码很好.newnew[]

  • @ RichardJ.RossIII:即使那些操作如何分配内存匹配的特定*内部*细节仍然是无关的**:新旧[](以及删除/删除[])之间存在*巨大*差异它们本身与内存分配无关.请不要提供不完整,不准确或明显错误的答案或评论.它对每个人都有害 - 包括你自己. (4认同)
  • @ RichardJ.RossIII这就像说*有`xyz`实现做垃圾收集,所以你永远不需要使用`delete`*.它有什么关系? (2认同)

Dav*_*nan 5

delete[]操作者删除的存储器的整个块.您无法释放部分内存块 - 您只能解除分配整个块.

这也是的情况下new/delete,和malloc/free.解除分配功能只能解除分配整个内存块.