#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 块内存的内容复制到堆区域中的该内存中,请告诉我。