【发布时间】:2011-01-09 02:10:00
【问题描述】:
malloc(0) 返回什么?
realloc(malloc(0),0) 的答案是否相同?
#include<stdio.h>
#include<malloc.h>
int main()
{
printf("%p\n", malloc(0));
printf("%p\n", realloc(malloc(0), 0));
return 0;
}
Linux GCC 的输出:
manav@manav-workstation:~$ gcc -Wall mal.c
manav@manav-workstation:~$ ./a.out
0x9363008
(nil)
manav@manav-workstation:~$
malloc(0) 的输出每次都在变化。这是标准答案吗?除了学术研究之外,为什么有人会对获得这样的指针感兴趣?
编辑:
如果malloc(0) 返回虚拟指针,那么下面是如何工作的:
int main()
{
void *ptr = malloc(0);
printf("%p\n", realloc(ptr, 1024));
return 0;
}
编辑:
以下代码为每次迭代输出“可能”。为什么它不会失败?
#include<stdio.h>
#include<malloc.h>
int main()
{
int i;
void *ptr;
printf("Testing using BRUTE FORCE\n");
for (i=0; i<65000; i++)
{
ptr = malloc(0);
if (ptr == realloc(ptr, 1024))
printf("Iteration %d: possible\n", i);
else
{
printf("Failed for iteration %d\n", i);
break;
}
}
return 0;
}
【问题讨论】:
-
@tommieb75:回答原始问题会有所帮助。话虽如此,这个问题有两个部分,第二部分更有趣,而不是欺骗。有关详细信息,请参阅我对此问题的回答。
标签: c linux pointers malloc realloc