根据这个问题的答案:“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

10-07 19:27
查看更多