【发布时间】:2020-06-18 03:58:01
【问题描述】:
我一直在使用 C,我认为指针不应该指向局部变量,但是库包含一个函数 gmtime(),它似乎返回一个指向在其中创建的变量的指针。我的理解正确吗?
time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);
【问题讨论】:
标签: c pointers time.h dangling-pointer
我一直在使用 C,我认为指针不应该指向局部变量,但是库包含一个函数 gmtime(),它似乎返回一个指向在其中创建的变量的指针。我的理解正确吗?
time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);
【问题讨论】:
标签: c pointers time.h dangling-pointer
在内部,gmtime 包含一个使用 static 存储类说明符声明的变量。这意味着该变量具有完整的程序生命周期,因此从函数返回其地址是有效的。
这也意味着,如果您将该指针保存在某处并使用不同的参数再次调用gmtime,它会更改保存的指针指向的内容。
【讨论】:
它不是返回指向局部变量的指针,而是返回指向静态分配的内存区域的指针。
来自手册页:
回归 value 指向一个静态分配的结构,该结构可能会被后续调用任何日期和时间函数覆盖。
静态分配的内存区域可以简单地是一个全局变量,或一个static 局部变量。后者不存在于堆栈中,而是存在于data 段中以及其他静态分配的数据成员中。
【讨论】: