rah*_*hul 3 c++ arrays pointers memory-leaks
我在一个更大的代码中间有一小段代码:
int *p = new int[100];
p += 50;
delete []p;
Run Code Online (Sandbox Code Playgroud)
编译器将只删除从51内存ST位置?我认为确实如此.但是,在数组指针的情况下,编译器会保存一个附加项,该项指示已分配的对象数.那么,在这种情况下,是否应该继续删除超出分配大小的内存?或者它是否删除第51至第 100 个元素并将第1至第 50 个保留在内存中,在这种情况下可能发生内存泄漏.
这是未定义的行为.C++标准说:
3.7.4.2释放功能
3 ...否则,如果
operator delete(void*)标准库中提供的值不是先前调用任何一个operator new(std::size_t)或operator new(std::size_t, const std::nothrow_t&)在标准库中返回的值之一,则行为未定义,并且如果提供给的值中的行为未定义,则行为未定义operator delete[](void*).标准库不是先前调用任何一个operator new[](std::size_t)或operator new[](std::size_t, const std::nothrow_t&)在标准库中返回的值之一.4 ...使用无效指针值(包括将其传递给释放函数)的效果未定义.(在某些实现中,它会导致系统生成的运行时故障.)