内存泄漏与否?

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 保留在内存中,在这种情况下可能发生内存泄漏.

cni*_*tar 6

它实际上是未定义的行为.你只能delete/ delete[]你从new/ 得到什么new[].


Gre*_*osz 5

这是未定义的行为.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 ...使用无效指针值(包括将其传递给释放函数)的效果未定义.(在某些实现中,它会导致系统生成的运行时故障.)