我正在编写一个文件复制程序,在这个程序中,我遇到了关于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/