gpt4 book ai didi

c - 我在比较时间戳时遇到段错误(核心转储)错误 (C)

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:21 25 4
gpt4 key购买 nike

我正在尝试创建一个比较两个时间戳的函数,如果第一个时间戳早于第二个时间戳,则该函数将返回 -1;如果相等,则返回 0;如果晚了,返回1;

下面是我的代码,但是,它不起作用并在我运行时抛出段错误(核心转储)错误:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>

typedef struct timeval timevalue;


int compare_time_stamps(timevalue *a, timevalue *b)
{
int cmp = timercmp(a, b, >);

if (cmp > 0)
return 1; /* a is greater than b */
else
{
cmp = timercmp(a, b, ==);
if (cmp > 0)
return 0; /* a is equal to b */
else
return -1; /* a is less than b */
}
}

int main()
{
timevalue *start, *end;

gettimeofday(start, NULL);

int i;
for (i = 0; i < 1000000; i++);

gettimeofday(end, NULL);

int cmp = compare_time_stamps(start, end);

printf("comparison result is %d\n", cmp);

return 0;
}

也就是说,如果我不以时间值 * 开头,一切正常,请参阅下面的工作代码:

typedef struct timeval timevalue;


int compare_time_stamps(timevalue a, timevalue b)
{
int cmp = timercmp(&a, &b, >);

if (cmp > 0)
return 1; /* a is greater than b */
else
{
cmp = timercmp(&a, &b, ==);
if (cmp > 0)
return 0; /* a is equal to b */
else
return -1; /* a is less than b */
}
}

int main()
{
timevalue start, end;

gettimeofday(&start, NULL);

int i;
for (i = 0; i < 1000000; i++);

gettimeofday(&end, NULL);

int cmp = compare_time_stamps(start, end);

printf("the comparison result is %d\n", cmp);

return 0;
}

这两种方法有何区别?谢谢

最佳答案

timevalue start, end; 

当你这样做时,你正在为你调用的结构 timeval 分配空间

typedef struct timeval 时间值;

所以您实际上是在为当前栈帧中的两个结构分配空间。

当你执行 timevalue *start, *end; 时,你只分配了两个指向结构 timeval 的指针,但没有为结构 timeval 分配内存 您将不得不使用 malloc 并分配空间。

start = malloc(sizeof(timevalue));
end = malloc(sizeof(timevalue));

同样在函数结束时,你必须释放分配的内存

printf("comparison result is %d\n", cmp);
free(start);
free(end);
return 0;
}

在 C 中,当您定义一个指针 (int *a) 时,您的工作是确保它指向有效内存。一些关于指针的阅读应该可以。

关于c - 我在比较时间戳时遇到段错误(核心转储)错误 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com