在C/C++如果使用了如果用free分配了一块大小为x bytes的空间的话, 据说那块空间其实不止x bytes, 还会有多出的一部分用来保存分配空间的大小等信息, 这也是为什么free的时候只需要传一个指针进去进行了, 我想知道的是, 那如果free的时候我不传起点这个头指针进去, 而是把空间中任意位置的某个指针传进去, 这样的话会发生什么呢?
C/C++
free
x bytes
光阴似箭催人老,日月如移越少年。
題主是這個意思嗎?
#include <stdio.h> #include <stdlib.h> int main() { int* ptr = (int*)malloc(3 * sizeof(int)); printf("%x\n", ptr); printf("%x", ptr + 1); free(ptr + 1); return 0; }
會導致未定義行為。 http://www.cplusplus.com/refe...
會報錯pointer being freed was not allocated,不讓你做這種非法的事,程序不會那麼傻的
pointer being freed was not allocated
會炸掉…具體的炸法取決於作業系統的實現,反正都是炸,LZ有興趣的話可以去你的作業系統下跑一跑:
#include <cstdio> using namespace std; struct zz{ zz(){puts("BEGIN");} ~zz(){puts("END");} }; int main() { zz *a=new zz[5]; delete [](a+1); return 0; }
題主是這個意思嗎?
會導致未定義行為。 http://www.cplusplus.com/refe...
會報錯
pointer being freed was not allocated
,不讓你做這種非法的事,程序不會那麼傻的會炸掉…具體的炸法取決於作業系統的實現,反正都是炸,LZ有興趣的話可以去你的作業系統下跑一跑: