C问题免费()

ste*_*eve 2 c malloc free

#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)

问题:

  1. 从位置p + 1开始的内存是否空闲(如果malloc返回0x1000,释放的内存将来自0x1004,假设一个4字节整数)?

  2. 除了0x1000的4个字节(如果malloc返回0x1000)不可用(除非你做p--并使用地址)之外,这个代码是否有任何意义?

sha*_*oth 12

这是未定义的行为 - 您必须传递与free()获得的完全相同的指针malloc().使用您的代码可能会发生任何事情 - 可能堆将被破坏.

这样想吧.free()只有一个参数,所以它必须推断出哪个标记可以完全没有那个参数.没有办法"释放更少的记忆" - 要么全部释放(要求扣除将是非常耗时的btw),或者发生不好的事情 - 后者更有可能.你不应该假设任何事情,只是不要那样做.