C中的Realloc分配

时间:2014-01-05 23:00:39

标签: c realloc

您好我试着了解realloc是如何工作的,所以这是我的问题:

假设首先我们调用malloc以便为1 int分配足够的内存。

int *p=malloc(sizeof(int))

然后我们称之为realloc:

p=realloc(p,sizeof(int)*2);

指针p指向内存,可用空间为2或1 + 2整数?

3 个答案:

答案 0 :(得分:3)

the man pages中所述:

  

void *realloc(void *ptr, size_t size);

     

[...]

     

realloc()函数会更改指向的内存块的大小          to ptr to size bytes。内容将在范围内保持不变          从该地区的起点到最新的新旧          大小。如果新大小大于旧大小,则添加内存          不会被初始化。 [...]

(我的重点)。换句话说,realloc的size参数会询问您要分配的内存字节数,而不是您要添加的内存字节数。

希望这有帮助!

答案 1 :(得分:2)

void * realloc(void * ptr,size_t size);

更改ptr。

指向的内存块的大小

该函数可以将内存块移动到一个新位置(该函数返回其地址)。

即使将块移动到新位置,内存块的内容也会保留到新旧大小中的较小者。如果新大小较大,则新分配的部分的值是不确定的。

如果ptr是空指针,则该函数的行为类似于malloc,指定一个大小字节的新块并返回指向其开头的指针。

在C90(C ++ 98)中:

否则,如果size为零,则先前在ptr分配的内存将被释放,就像调用free一样,并返回空指针。

在C99 / C11(C ++ 11)中:

如果size为零,则返回值取决于特定的库实现:它可以是空指针或其他不应被解除引用的位置。

参数ptr:

指向先前使用malloc,calloc或realloc分配的内存块的指针。 或者,这可以是空指针,在这种情况下,分配一个新块(就像调用malloc一样)。

参数大小:

内存块的新大小,以字节为单位。 size_t是无符号整数类型。

返回值

指向重新分配的内存块的指针,可以与ptr或新位置相同。 此指针的类型为void *,可以将其强制转换为所需类型的数据指针,以便可以取消引用。

在C90(C ++ 98)中:

空指针表示大小为零(因此ptr被释放),或者该函数没有分配存储(因此ptr指向的块未被修改)。

在C99 / C11(C ++ 11)中:

空指针表示函数未能分配存储空间,因此ptr指向的块未被修改。

答案 2 :(得分:1)

来自realloc(3)

  

<强>概要
  void * realloc(void * ptr,size_t size);
  的描述
  realloc()函数将ptr指向的内存块的大小更改为size字节。