#include <stdio.h>
int main ()
{
int *p = (int *)malloc((100*sizeof(int)));
p++;
free(p);
/* do something */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:
从位置p + 1开始的内存是否空闲(如果malloc返回0x1000,释放的内存将来自0x1004,假设一个4字节整数)?
除了0x1000的4个字节(如果malloc返回0x1000)不可用(除非你做p--并使用地址)之外,这个代码是否有任何意义?
sha*_*oth 12
这是未定义的行为 - 您必须传递与free()获得的完全相同的指针malloc().使用您的代码可能会发生任何事情 - 可能堆将被破坏.
这样想吧.free()只有一个参数,所以它必须推断出哪个标记可以完全没有那个参数.没有办法"释放更少的记忆" - 要么全部释放(要求扣除将是非常耗时的btw),或者发生不好的事情 - 后者更有可能.你不应该假设任何事情,只是不要那样做.