我有:
int *ptr = new int[8];
delete[] ptr; // it ok, all ptr is delete;
Run Code Online (Sandbox Code Playgroud)
但如果我有:
int *ptr = new int[8];
ptr++;
delete[] ptr;
Run Code Online (Sandbox Code Playgroud)
我的问题:
是否delete[]删除所有ptr来自ptr[0]于ptr[7]或刚刚ptr[1]到ptr[7]?而且,如果它删减ptr[1]到ptr[7],如何delete[]知道真正的大小来删除这个时间呢?
use*_*751 18
无论; 它是未定义的行为,通常意味着它会使程序崩溃.
传递给的指针delete[]必须是之前返回的指针new[].没有例外*.new[]返回指向数组第一个元素的指针,因此必须将指针传递给数组的第一个元素delete[].
*唯一的例外是您可以传递NULL指针,在这种情况下它将不执行任何操作.