c语言realloc分配

Python023

c语言realloc分配,第1张

 原型:extern void *realloc(void *ptr, size_t newsize)

用法:#include <stdlib.h>

功能:改变ptr所指内存区域的大小为newsize长度。

说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放。

示例:

  #include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)

{

char *p

p = (char *)malloc(100)

if(p)

printf("Memory Allocated at:%p\n", p)

else

printf("Not Enough Memory!\n")

p = (char *)realloc(p, 256)

if(p)

printf("Memory Reallocated at:%p\n", p)

else

printf("Not Enough Memory!\n")

free(p)

return 0

}

延伸:通常,realloc的用法会如下:

p = realloc(p, new_size)

if (p == NULL) {

return

}

如果realloc()失败,ptr指向的这块内存不会变化,不会free或者移动。也就是说,如果realloc()失败了,照着上面代码的写法,这块内存就被永远遗忘。

  tmp = realloc(p, new_size)

if (tmp == NULL) {

free(p)

return

}

p = tmp

c语言中malloc函数和realloc函数的区别为:分配不同、释放不同、强制转化不同。

一、分配不同

1、malloc函数:malloc函数对没有分配过的内存块直接进行分配。

2、realloc函数:realloc函数是在已经分配好的内存块重新进行分配。

二、释放不同

1、malloc函数:malloc函数分配好的内存块一般要用free(size_t size)来释放内存块。

2、realloc函数:realloc函数分配好的内存块不需要用free(size_t size)来释放内存块。

三、强制转化不同

1、malloc函数:malloc函数需要强制转化。

2、realloc函数:realloc函数不需要强制转化。