我的以下代码仅在我添加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>
,但我不知道为什么会出现这样的错误!请问,有人可以告诉我为什么吗?
答案 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
,一个未初始化的局部变量。