您好我试着了解realloc是如何工作的,所以这是我的问题:
假设首先我们调用malloc以便为1 int分配足够的内存。
int *p=malloc(sizeof(int))
然后我们称之为realloc:
p=realloc(p,sizeof(int)*2);
指针p指向内存,可用空间为2或1 + 2整数?
答案 0 :(得分:3)
如the man pages中所述:
void *realloc(void *ptr, size_t size);
[...]
realloc()
函数会更改指向的内存块的大小 to ptr to size bytes。内容将在范围内保持不变 从该地区的起点到最新的新旧 大小。如果新大小大于旧大小,则添加内存 不会被初始化。 [...]
(我的重点)。换句话说,realloc
的size参数会询问您要分配的内存字节数,而不是您要添加的内存字节数。
希望这有帮助!
答案 1 :(得分:2)
更改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)
<强>概要强>
void * realloc(void * ptr,size_t size);
的描述强>
realloc()函数将ptr指向的内存块的大小更改为size字节。