char* ptr = new char[512]; // also malloc() can be used
ptr = ptr + 10;
delete[] ptr; // free() if memory allocated by malloc
Run Code Online (Sandbox Code Playgroud)
正如我们所知,在分配内存时new和malloc在某处保存了分配的内存大小(在哪里?取决于编译器的实现).在释放内存时,delete和free()使用此保存的大小值.在我的情况下,我将起始指针移动了10个字节.我的问题是:内存泄漏的情况?未定义的行为?或者它会尝试在512之后释放下一个额外的10个字节?
thi*_*his 11
这是未定义的行为,您必须释放或删除相同的指针.
来自ISO/IEC 9899:201x:
7.22.3.3自由功能
free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义.
关于未定义的行为:
3.4.3(1)未定义的行为:
使用不可移植或错误的程序结构或错误数据时的行为,本国际标准不对此要求