C语言中的Realloc分配

C语言中的Realloc分配,c,realloc,C,Realloc,你好,我试图了解realloc是如何工作的,所以我的问题是: 假设我们首先调用malloc,以便为1 int分配足够的内存 int *p=malloc(sizeof(int)) 然后我们这样称呼realloc: p=realloc(p,sizeof(int)*2); 指针p指向内存,可用空间为2或1+2 ints?来自 简介 void*realloc(void*ptr,size\u t size) 说明 函数的作用是:将ptr指向的内存块大小更改为字节大小 从 简介 void*realloc

你好,我试图了解realloc是如何工作的,所以我的问题是:

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

int *p=malloc(sizeof(int))
然后我们这样称呼realloc:

p=realloc(p,sizeof(int)*2);
指针p指向内存,可用空间为2或1+2 ints?

来自

简介
void*realloc(void*ptr,size\u t size)
说明
函数的作用是:将ptr指向的内存块大小更改为字节大小

简介
void*realloc(void*ptr,size\u t size)
说明
函数的作用是:将ptr指向的内存块大小更改为字节大小

如中所述:

void*realloc(void*ptr,size\u t size)

[……]

realloc()
函数更改内存块的大小 通过ptr设置字节大小。内容将在该范围内保持不变 从开始的区域到最小的新旧区域 尺寸。如果新大小大于旧大小,则添加的内存 将不会初始化。[……]

(我的重点)。换句话说,
realloc
的size参数要求总共分配多少字节的内存,而不是要添加的内存字节数

希望这有帮助

如中所述:

void*realloc(void*ptr,size\u t size)

[……]

realloc()
函数更改内存块的大小 通过ptr设置字节大小。内容将在该范围内保持不变 从开始的区域到最小的新旧区域 尺寸。如果新大小大于旧大小,则添加的内存 将不会初始化。[……]

(我的重点)。换句话说,
realloc
的size参数要求总共分配多少字节的内存,而不是要添加的内存字节数

希望这有帮助

void*realloc(void*ptr,size\u t size); 更改ptr指向的内存块的大小

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

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

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

C90(C++98)中的

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

C99/C11(C++11)中的

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

参数ptr:

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

参数大小:

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

返回值:

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

C90(C++98)中的

null指针表示大小为零(因此ptr被解除分配),或者函数未分配存储(因此ptr指向的块未被修改)

C99/C11(C++11)中的

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

void*realloc(void*ptr,size\u t size); 更改ptr指向的内存块的大小

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

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

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

C90(C++98)中的

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

C99/C11(C++11)中的

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

参数ptr:

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

参数大小:

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

返回值:

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

C90(C++98)中的

空指针表示大小为零(因此ptr被解除分配),或者函数没有