我正在编写一个文件复制程序,在这个程序中,我遇到了关于realloc()的困难。
请看下面的代码片段(我编写它是为了理解realloc()的工作原理):-

int main(){
    char *p =(char *) malloc ( 10 ),*t;
    p = "this is";
    if (strlen (p)==7)
    {
        t = realloc ( p,14);
        if ( t==NULL)
        {
            printf ("no no\n");
        }
    }
    printf("%p\n%p\n%d",p,t,strlen(p));
    free (p);
    free (t);
    return 1;
}

输出
no no      //because realloc () is unable to reallocate  the memory
00450357   //address of p
00000000   //address of t

那么,为什么realloc()无法重新分配内存并将其(其地址)分配给t
编辑
我在windows中使用代码块。

最佳答案

您已按静态字符串的地址覆盖malloc返回的值。然后,realloc接收静态字符串的地址作为要重新分配的参数。

char *p =(char *) malloc ( 10 ),*t;
p = "this is";
t = realloc ( p,14);

你可能想要的是:
char *p =(char *) malloc ( 10 ),*t;
strcpy(p, "this is");
t = realloc ( p,14);

关于c - realloc()无法重新分配内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22729333/

10-11 23:11
查看更多