gpt4 book ai didi

c++ - 无法理解工作代码和损坏代码之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:51 25 4
gpt4 key购买 nike

我需要初始化一个 Posix 计时器,我让它工作了,但有点出乎意料。我不明白工作代码和给我段错误的代码之间的区别。

这是 create_timer 函数的头文件:

int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid);

请告诉我版本 2 和版本 3 之间有什么区别?

另外,假设 3 有效,版本 1 怎么能编译呢?

很明显,timer_create 的第三个参数在 v1 和 v3 中是不同的,但它们都能编译..

此代码失败:(但编译)

main():
timer_t *tidlist;
tidlist = calloc(2, sizeof(timer_t));
initialize_timer(tidlist[0], 2);

int initialize_timer(timer_t *tid, int seconds){
if (timer_create(CLOCK_REALTIME, &sev, tid) == -1) <----- seg fault here. but it should not even compile because the working version accepts the **timer_t as argument.

这甚至不能编译:(即使它是完全一样的东西)

main():
timer_t *tidlist;
tidlist = calloc(2, sizeof(timer_t));
initialize_timer(tidlist[0], 2);//initilize timer for producer

initialize_timer(timer_t *tid, int seconds):
if (timer_create(CLOCK_REALTIME, &sev, &tid) == -1) <------- type error for 3 arg: incompatible pointer type.

此代码有效:

main():
timer_t *tidlist;
tidlist = calloc(2, sizeof(timer_t));
initialize_timer(tidlist, 2);//initilize timer for producer

int initialize_timer(timer_t *tidlist, int seconds){
if (timer_create(CLOCK_REALTIME, &sev, &tidlist[0]) == -1)

提前致谢。

最佳答案

  1. Please tell me whats the difference between version 2 and 3?

    版本 2 具有此行和定义:

    initialize_timer(timer_t *tid, int seconds):
    if (timer_create(CLOCK_REALTIME, &sev, &tid) == -1)

    tid 是一个 timer_t *,所以 &tid 是一个 timer_t **,这与timer_create() 期望什么。

    版本 3 有:

    int initialize_timer(timer_t *tidlist, int seconds){
    if (timer_create(CLOCK_REALTIME, &sev, &tidlist[0]) == -1)

    tidlist 是一个 timer_t *,所以 &tidlist[0] 也是一个 timer_t * ,这是预期的并且有效。 &tidlist[0] 等同于 tidlist

  2. Also, given that 3 works, how can version 1 even compile?

    如果没有警告,版本 1 将无法编译。注意他们。你有这个代码:

    timer_t *tidlist;
    tidlist = calloc(2, sizeof(timer_t));
    initialize_timer(tidlist[0], 2);

    tidlist 是一个 timer_t *,所以 tidlist[0] 是一个 timer_t,它不是initialize_timer 期望什么。

关于c++ - 无法理解工作代码和损坏代码之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19336724/

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