Skip to content

UB11

Definition⚓︎

The value of an object with automatic storage duration is used while the object has an indeterminate representation.

若一个具有自动储存期的对象在它没有确定的表示值时被使用,此时的行为是未定义的。

description⚓︎

自动储存期⚓︎

C语言的变量有两种生存期:静态存储期(static storage duration)和自动存储期(automatic storage duration)。

具有文件作用域的变量属于静态存储期,例如全局变量、函数等。属于静态存储期的变量在程序执行期间将一直占据存储空间,直到程序关闭才释放。

具有代码块作用域的变量一般情况下属于自动存储期。属于自动存储期的变量在代码块结束时将自动释放存储空间。

此处的未定义行为强调对象是自动存储期的,可联系全局变量定义时有默认赋值。

对象表示值⚓︎

可简单理解为内存中的01串。

表示值不确定最常见的情况是变量定义而未赋值。

code⚓︎

UB11.c

#include<stdio.h>

int main() {
    int a;
    printf("%d", a);    //undefined behavior

    return 0;
} 

Configurations⚓︎

configuration1⚓︎

Dev-C++ TDM-GCC 4.9.2 64-bit Debug

configuration2⚓︎

Dev-C++ TDM-GCC 4.9.2 32-bit Debug

Behaviors⚓︎

configuration1⚓︎

Compilation successful

Output: 0

configuration2⚓︎

Compilation successful

Output: 36