如果在C中更改指针,将释放多少内存?

Ash*_*til -1 c memory free

假设有20个内存块,指针p指向第一个块.现在,当我这样做时:

p++;
free(p);
Run Code Online (Sandbox Code Playgroud)

将释放多少块内存,为什么?

Sou*_*osh 25

非确定性.不能说.您需要提供返回的确切指针malloc().

传递[和family] free()未返回的指针malloc()未定义的行为.

根据你的问题,如果malloc()-ed指针存储在p了,你p++和打电话free(p);,那么就p没有了指针由归国calloc,mallocrealloc功能.

根据第7.20.3.2章,c99标准,第2段

free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果参数与之前由calloc,malloc或realloc函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义.

  • 什么让你有那个想法? (6认同)
  • @AshishPatil可能会有分配器发生这种情况,但我认为任何广泛使用的分配器设计都不允许这样做,因此如果释放了19个块,那么这只是未定义行为可能导致的许多奇怪事情之一. (6认同)
  • @AshishPatil好,你可以在你的参考中引用一些东西吗?我添加了一些参考来回复我的答案. (2认同)