使用clock()函数

时间:2016-10-30 18:15:33

标签: c

我的以下代码仅在我添加segmentation fault: 11函数来计算经过的时间时才给出clock()(当我评论clock()时,我得到没有问题的结果!!!):

typedef struct heap_strct *Sort;
struct heap_strct {
    int count;
    int size;
    int *queue;
};

int main() {
    time_t start = clock();
    Sort h;   // Sort is a structure
    initi(h);
    parse(h);
    time_t end = clock();
    double time_elapsed = (double)(end - start) / CLOCKS_PER_SEC;

    printf("Time = %f", time_elapsed);
}

我正在使用#include <time.h>,但我不知道为什么会出现这样的错误!请问,有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

您将未初始化的指针传递给函数initi()。如果此函数修改了结构,则调用未定义的行为。

隐藏在typedef后面的指针是一个非常糟糕的习惯。评论完全是误导性的:Sort不是结构!

直接定义结构并传递其地址:

#include <time.h>

struct heap_strct {
    int count;
    int size;
    int *queue;
};

int main(void) {
    clock_t start = clock();
    struct heap_strct h;   // h is a structure for real now!
    initi(&h);
    parse(&h);
    time_t end = clock();
    double time_elapsed = (double)(end - start) / CLOCKS_PER_SEC;

    printf("Time = %f\n", time_elapsed);
    return 0;
}

答案 1 :(得分:0)

clock()是经过验证的库函数,不会导致段错误。

您将指针h传递给initi,但没有分配h的存储空间。然后将相同的指针传递给parse。但结构仍然没有存储空间!

当你评论clock()时,不会进行调用,因此不会更改堆栈。在堆栈上也是h,一个未初始化的局部变量。