1

I have a simple program, for learning purposes, yet I keep on getting null returned when I realloc from allocated array.

#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);

}

I'm not able to realloc, retval = (char *)realloc(ptr, 5); what am I doing wrong?

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)」を呼び出しているというバグが 1 つあります。retval と同じかもしれませんが、その場合は 2 回解放しています。

于 2012-09-04T10:10:37.917 に答える