我有一个简单的程序,用于学习目的,但当我从已分配的数组重新分配空间时,我总是得到null返回。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char *ptr, *retval;
ptr = (char *)calloc(10, sizeof(char));
if (ptr == NULL)
printf("calloc failed\n");
else
printf("calloc successful\n");
retval = (char *)realloc(ptr, 5);
if (retval == NULL)
printf("realloc failed\n");
else
printf("realloc successful\n");
free(ptr);
free(retval);
}我不能重新定位,retval = (char *)realloc(ptr, 5);,我做错了什么?
发布于 2012-09-04 18:06:08
它对我来说就像预期的那样工作:
calloc successful
realloc successful
*** glibc detected *** double free or corruption假设双重释放是故意的,代码看起来很好。不要调用free(ptr),因为您已经通过重新分配它释放了它。
发布于 2012-09-04 18:10:38
当我编译它时,这对我来说是有效的。你有一个bug,那就是当ptr指向的内存不再有效时,你会调用"free(ptr)“,因为你重新分配了它。它可能与retval相同,但在这种情况下,您需要将其释放两次。
https://stackoverflow.com/questions/12261110
复制相似问题