当内存位置在正常内存区域中不可用但在堆区域中可用时,realloc的功能

时间:2012-08-25 14:18:33

标签: c memory-management malloc realloc

  

可能重复:
  Malloc and Realloc relation, How does it handle when the required space is not available in memory

#include<stdio.h>
#include<stdlib.h>
void main()
{
  int *p;
  p = malloc(6);
  p = realloc(p, 10);
  if (p == NULL)
  {
    printf("error"); // when does p point to null consider i have enough space in prgrm
                     //memory area but not in memory where realloc is trying to search 
                     //for the memory, I dont know how to explain that try to undrstnd
   exit(1);
   }
}

以代码为例,假设总内存为10个字节,通过malloc函数指定类型为int和ohter 6字节的指针使用2个字节,其余2个字节被其他程序占用,现在当我运行realloc函数来扩展指针指向的内存,它将在内存中搜索10个字节,当它不可用时,它从堆区域分配10个字节的内存并复制malloc的内容并将其粘贴到新分配的内存区域中。堆区域然后删除存储在malloc中的内存吧?

realloc()是否返回NULL指针,因为内存不可用?没有权利!?它确实去堆区域进行内存分配吗?它没有返回NULL指针吗?

听我说:| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |

将此视为内存块:假设malloc()func使用01到06,07和08是空闲的,最后2个块i,e 09和10正在被其他程序的内存使用。现在,当我调用realloc(p,10)时,我需要10个字节,但只有2个空闲字节,那么realloc的作用是什么?返回一个NULL指针或从堆区域分配内存,并将01到06块内存的内容复制到堆区域中的那个内存,请告诉我。

0 个答案:

没有答案