我有下面的代码,当我在第20行(靠近底部)没有int milli =
的情况下运行它时,它运行得很好,但是当我将函数的结果赋给变量({{ 1}})它会引发分段错误。我看不出导致段错误的区别。
milli
答案 0 :(得分:3)
timeval_struct
指向哪里?你没有为此分配空间。
使用malloc
或声明struct timeval timeval_struct;
并将其地址传递给gettimeofday(&timeval_struct, NULL)
。
答案 1 :(得分:2)
代码崩溃,因为timeval_struct
指针未初始化。您需要为其分配struct timeval
,或使用自动变量而不是指针,如下所示:
struct timeval timeval_struct;
...
gettimeofday(&timeval_struct, NULL);
...
int milli = seconds_of_day(&timeval_struct, tm_struct);
答案 2 :(得分:1)
您已将timeval_struct
声明为指针,但尚未为其分配任何内存。所以它指向你的程序不拥有的未定义内存。当seconds_of_day()
尝试访问timeval
结构时,它会崩溃。
您可以通过将timeval_struct
声明为实际结构而不是指针来解决此问题:
int main() {
struct timeval timeval_struct; // Actual struct, not pointer.
time_t rawtime;
struct tm *tm_struct;
gettimeofday(&timeval_struct, NULL); // Pass address of struct.
time(&rawtime);
// This is OK: gmtime() returns a pointer to allocated memory.
tm_struct = gmtime(&rawtime);
// Pass address of allocated timeval_struct.
// NOTE: seconds_of_day() does not use tm_struct at all.
int milli = seconds_of_day(&timeval_struct, tm_struct);
return(0);
}