【发布时间】:2018-06-27 14:34:56
【问题描述】:
根据这个问题的答案:“How does delete[] "know" the size of the operand array?”
您的分配器将跟踪您分配了多少内存
和
free 知道要释放多少内存”
是的,内存块大小由 malloc 存储在“某处”(通常在块本身中),所以这就是 free 知道的。然而,new[]/delete[] 是另一回事。后者基本上在 malloc/free 之上工作。 new[] 还存储它在内存块中创建的元素数量(独立于 malloc),以便稍后 delete[] 可以检索并使用该数字来调用适当数量的析构函数
这是否意味着 delete[] 与指针指向的位置无关?以下代码是否有效还是会导致内存泄漏?
void createArray(){
char* someArray = new char[20];
readData(someArray);
//Is this delete still valid after moving the pointer one position?
delete[] someArray;
}
char readData(char* &arr){
char value = *arr;
//Let it point to the next element
arr += 1;
return value;
}
【问题讨论】:
-
你的例子没有按照你的想法做,你的意思是写
char readData(char*& arr) {... -
readData获取指针的副本;增量更改副本,但不影响原始值。无论如何,必须使用operator new[]返回的值调用operator delete[]。 -
@PeteBecker 现在它得到了参考! (OP 编辑)
标签: c++ memory memory-management