Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C局部变量地址返回警告_C_Warnings_Local Variables - Fatal编程技术网

C局部变量地址返回警告

C局部变量地址返回警告,c,warnings,local-variables,C,Warnings,Local Variables,我在C中有这个函数: static Node* newNode(void* e){ Node n={e,NULL,NULL}; return &n; } 在编译过程中,我得到了以下警告,我想了解它发生的原因: warning: function returns address of local variable [enabled by default] 这背后隐藏着什么样的危险 谢谢从函数返回时,局部变量将被销毁。在函数返回后访问它们是未定义的行为,不要这样做。警告是因为变量的作用域

我在C中有这个函数:

static Node* newNode(void* e){
Node n={e,NULL,NULL};
return &n;
}
在编译过程中,我得到了以下警告,我想了解它发生的原因:

warning: function returns address of local variable [enabled by default]
这背后隐藏着什么样的危险


谢谢

从函数返回时,局部变量将被销毁。在函数返回后访问它们是未定义的行为,不要这样做。

警告是因为变量的作用域是函数的局部-一旦函数返回,该变量就不再在作用域中,其值也未定义。

代码完全中断。它返回一个指向节点所在位置的指针,但该节点已不在该位置。所以返回的指针是垃圾。所以我应该复制一个值,而不是传递它的引用?@Reonarudo在
newNode
函数中使用
malloc
来创建节点:
node*n=malloc(sizeof*n)@ouah如下:静态节点*newNode(void*e){Node*n=(Node*)malloc(sizeof(*n));n->e=e;返回n;}可能的重复