我在一个非常旧的应用程序中遇到了一些代码我正在调试并修复它,但我不确定实际行为是什么。
例如:
char* p = new char[10];
delete[] p;
所以这是有效的,因为运行时跟踪数组的头部,当你删除[]它知道删除10个字节?至少这是我的理解。
然而,如果某些brainiac这样做:
char* p = new char[10];
p += 5;
delete[] p;
会发生什么?它应该不起作用吧?您正在尝试删除数组,但在p的当前位置,运行时无法确定您要删除的数组。