-4

可能重复:
Malloc 和 Realloc 关系,当所需空间在内存中不可用时如何处理

#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 个字节,其中 2 个字节被声明为 int 类型的指针使用,另外 6 个字节由 malloc 函数占用,其余 2 个字节被其他程序占用,现在当我运行 realloc 函数时为了扩展指针指向的内存,它将在内存中搜索 10 个字节,当它不可用时,它从堆区域分配 10 个字节的内存并复制 malloc 的内容并将其粘贴到堆区域的新分配内存区域中,并且然后删除存储在malloc中的内存对吗?

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

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

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

4

0 回答 0