【问题标题】:dangling pointer in c programming [duplicate]c编程中的悬空指针[重复]
【发布时间】:2014-01-28 18:50:51
【问题描述】:
#include <stdio.h>

int *call();


int main() {

    int *ptr, a = 5;
    ptr = call();

    printf("%d\n", a);
    printf("%d", *ptr);
    return 0;
}

int * call() {
    int x = 25;
    ++x;

    return &x;
}

上面的代码在打印a的值后输出垃圾值。 但是如果我删除 printf("%d\n",a);语句然后它输出 x 的值。 请解释... 根据悬空指针的概念,输出应该是垃圾值。 我正在使用 gcc 编译器。

【问题讨论】:

标签: c


【解决方案1】:

实际发生的是调用第一个 printf 覆盖了 ptr 指向的位置。

原因是你返回了一个指向变量的指针,然后超出了范围。

这是未定义的行为。

不要那样做。

【讨论】:

    【解决方案2】:

    * 运算符应用于不确定指针(指向任何地方)会调用未定义的行为。你可能会得到任何东西。您得到26 可能是因为在调用call 之后,26 存储在执行堆栈中。 *ptr 从堆栈中获取该值。

    【讨论】:

    • @PascalCuoq;已编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2016-09-19
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多