具有整数赋值的C分段错误

时间:2013-06-02 11:11:54

标签: c segmentation-fault

我有下面的代码,当我在第20行(靠近底部)没有int milli =的情况下运行它时,它运行得很好,但是当我将函数的结果赋给变量({{ 1}})它会引发分段错误。我看不出导致段错误的区别。

milli

3 个答案:

答案 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);

Demo on ideone

答案 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);
}