int main() {
time_t *ptr;
struct tm *dates;
time(ptr);
gmtime_r(ptr, dates);
size_t a = 20; //<-- works with int
return 0;
}
失败,出现Segmentation fault (core dumped)
错误。当我使用int
代替size_t
时,一切正常。当我将gmtime_r
更改为非线程安全gmtime
时,它也可以工作,但我必须添加gmtime
将指定的指针声明。 Declaration of gmtime_r
gcc版本是5.4.0,用gcc -Wall -o a test.c
编译,64位ubuntu。
答案 0 :(得分:1)
一点都不奇怪;您需要分配dates
个点,因此gmtime_r
可以填充它。 ptr
指向的是什么,因此time
可以填补此内容。
答案 1 :(得分:1)
C中的指针就是这样,它们确定了数据可能存在的位置(或者可能不存在,在这种情况下,未定义的行为是规则)。
int main() {
time_t ptr; // Actual storage for time_t
struct tm dates; // Actual storage for struct tm
time(&ptr); // Pointer to a time_t
gmtime_r(&ptr, &dates); // Pointer to a time_t, pointer to a
// struct tm
size_t a = 20; //<-- works with int
return 0;
}