根据这个问题的答案:“How does delete[] "know" the size of the operand array?”
和
这是否意味着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;
}
最佳答案
是的,它确实。如果更改new[]
设置的指针值,然后在其上调用delete[]
运算符,则会调用未定义的行为:
char* someArray = new char[20];
someArray++;
delete[] someArray; // undefined behavior
而是将原始值存储在另一个指针中,并在其上调用
delete[]
:char* someArray = new char[20];
char* originalPointer = someArray;
someArray++; // changes the value but the originalPointer value remains the same
delete[] originalPointer; // OK