int main()
{
int *p1,*p2;
int a;
p1=(int *)malloc(sizeof(int));
p2=(int *)malloc(sizeof(int));
p1=&a;
p2=p1;
a=10;
printf("\n%d\n",*p1);
printf("\n%d\n",*p2);
printf("\n%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我删除行p1=(int *)malloc(sizeof(int));和p2=(int *)malloc(sizeof(int));
输出没有改变.你能解释一下原因吗?
xax*_*xon 10
p1 = &a
Run Code Online (Sandbox Code Playgroud)
这只是抛弃你的第一个malloc线的结果,第一个malloc是没有意义的.
p2 = p1
Run Code Online (Sandbox Code Playgroud)
对于p2做同样的事情.
p1和p2的POINTERS空间分配在堆栈中,因此您可以在不需要额外内存的情况下为其分配所有内容.如果要为它们分配一个尚未在其他地方分配内存的整数,则只需要malloc.
它们都指向堆栈上分配的内存,现在你在堆上分配的内存被泄露,无法恢复或释放.您可以看到这是真的,因为当您将a设置为10时,所有三条打印行都打印10.
因此,程序只有在没有这两个malloc行的情况下才是正确的.