更改指针后,free()将释放多少字节?

时间:2018-05-27 09:20:40

标签: c++ c malloc free

我有以下代码。

command = %q|someapp.exe -n "conf:conf_abc:\"Acc...|
system(command)

在上面的代码中,

  1. 当调用malloc(10)时,malloc如何返回内存地址?
  2. free(p)
  3. 将释放多少个字节
  4. free()如何知道要释放多少字节?

1 个答案:

答案 0 :(得分:4)

正如free的手册页告诉你的那样,除malloc返回的指针之外的任何参数都有未定义的行为:

  

free()函数释放ptr指向的内存空间,该内存空间必须由之前调用malloc(),calloc()或realloc()返回。否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为。如果ptr为NULL,则不执行任何操作

关于free如何知道块的大小:典型的内存分配器实现有每个块的头(包含大小,空闲列表指针等),free知道此头的大小以及malloc返回的指针的偏移量。

这也回答了你的第一个问题:malloc分配了这样一个块并返回指向实际对象开头的指针。