1

我有一个简单的程序,用于学习目的,但是当我从分配的数组重新分配时,我不断返回 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); 我做错了什么?

4

2 回答 2

3

它对我来说按预期工作:

calloc successful
realloc successful
*** glibc detected *** double free or corruption

假设双重释放是故意的,代码看起来不错。不要调用free(ptr),因为您已经通过重新分配它来释放它。

于 2012-09-04T10:06:07.567 回答
1

当我编译它时,这对我有用。您有一个错误,即当您重新分配 ptr 指向的内存不再有效时,您正在调用“free(ptr)”。它可能与 retval 相同,但在这种情况下,您将释放它两次。

于 2012-09-04T10:10:37.917 回答