C 返回局部变量和动态创建的变量的地址
代码1: 代码2:C 返回局部变量和动态创建的变量的地址,c,pointers,dynamic-memory-allocation,dangling-pointer,C,Pointers,Dynamic Memory Allocation,Dangling Pointer,代码1: 代码2: int *g(){ int *p; p=(int *)malloc(sizeof(int)); *p=10; return p; } 产出: 代码2-->[Warning]函数返回局部变量[-Wreturn local addr]的地址 仍然提供正确的输出(10) 代码1-->可以正常工作。没有警告,没有错误 我有很多问题 代码1还返回一个局部变量的地址,所以为什么没有警告 代码2给出了一个警告,我知道,我正在返回一个局部变量的地址。当函数
int *g(){
int *p;
p=(int *)malloc(sizeof(int));
*p=10;
return p;
}
产出:
代码2-->[Warning]函数返回局部变量[-Wreturn local addr]的地址
仍然提供正确的输出(10)
代码1-->可以正常工作。没有警告,没有错误
我有很多问题
int *g(){
int p=10;
return &p;
}
g
有两个问题:- 您没有检查
的结果,而您应该这样做malloc()
的铸造结果malloc()
p
本身在堆栈上。堆的地址存储在变量p
中,并返回存储的地址。确定。谢谢你现在说得非常清楚。
int main()
{
int *v=g();
printf("%d",*v);
return 1;
}