【问题标题】:Which kind of error is generated by the following program以下程序会产生哪种错误
【发布时间】:2021-12-21 10:28:28
【问题描述】:
#include <stdio.h>

int *fun() 
{ 
    int j = 18; 
    return &j; 
} 

int main() 
{ 
    int *p = fun(); 
    printf("%d\n", *p);
}

我对编译时错误和运行时错误感到困惑。以上代码会导致编译时错误还是运行时错误。任何有清楚的人请解释各种错误之间的主要区别,如编译时错误、语法错误、语义错误、逻辑错误、运行时错误等。

【问题讨论】:

  • 编译它。它编译时没有显示任何错误或警告吗?如果不是,则存在编译时错误。
  • 错误信息是什么?由于 UB,我只看到潜在的运行时错误(j 超出范围)。

标签: c error-handling


【解决方案1】:

虽然您的问题缺乏重点,但存在一个具体问题。

您返回了一个局部变量的地址。在fun 中,变量j 的自动生命周期仅限于函数调用。返回指向该变量的指针会调用undefined behavior

这是有效的代码,并且会编译,但你的编译器应该警告你。警告通常暗示潜在的运行时错误的来源。 然而因为行为是未定义的,实际上可能没有运行时错误。

【讨论】:

  • 你能详细说明未定义的行为吗
  • 这个名字不言自明,但要了解更多详细信息,我在答案中添加了指向相关维基百科文章的链接。
猜你喜欢
  • 2018-02-09
  • 2016-08-04
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多