2013-10-05 42 views
0

这样的函数是否会产生悬挂指针?这是否会导致悬挂指针?

int *foo() { 
    int a[2] = {2, 3}; 
    int *p = NULL; 
    p = a; 
    return p; 
} 
+0

是的,因为当'foo'退出时,通过堆栈管理在C调用序列中释放持有'a'(在堆栈上)的内存。 – lurker

回答

6

是的。您正在返回一个指向具有自动存储持续时间的数组的指针。当函数返回指针无效时。

2

永不返回指针自动局部变量。
在你的情况下,一旦foo返回,变量a不存在,所以指向它的指针将是无效的(调用未定义的行为)。

+1

从技术上讲,返回的指针(p)将指向一些内存位置,它仍然被用作堆栈。但是,在您查看返回的指针时,不能保证其他内容不会覆盖该内存位置。即使你没有得到段错误或其他无效指针错误,你也不能指望它指向任何有用的东西。 –