#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 :(得分:2)
返回值
...
realloc()函数返回指向新分配的指针 记忆,适合任何类型的变量,可能是 与ptr不同,如果请求失败,则为NULL。如果大小相等 为0,NULL或适合传递给free()的指针是 回。如果realloc()失败,则原始块保持不变;它 没有被释放或移动。
答案 1 :(得分:2)
realloc
函数,那么它将释放旧的内存块并返回NULL。 realloc(ptr, 0)
相当于free(ptr)
。realloc
函数的大小小于旧内存块的大小,则会缩小内存。Listen to me: | 01 | 02 | 03 | 04 | 05 | 06 | 07 |08 |09 | 10 | consider this as memory blocks: assume that 01 to 06 has been used by malloc() func, 07 and 08 are free and last 2 blocks i,e 09 and 10 are being used by memory of other programs. Now when i call realloc(p,10) i need 10 bytes but there are only 2 free bytes, so what does realloc do? return a NULL pointer or allocate memory form the heap area and copy the contents of 01 to 06 blocks of memory to that memory in the heap area, please let me know.
是的,它会将01
的内容从旧内存块复制到06
到新内存块,它将释放旧内存块,然后它将返回新内存块的地址。
答案 2 :(得分:0)