C++ 无法理解工作代码和中断代码之间的区别

C++ 无法理解工作代码和中断代码之间的区别,c++,c,pointers,posix,C++,C,Pointers,Posix,我需要初始化一个Posix定时器,我让它工作了,但奇迹般地发生了。我不明白工作和代码之间的区别,代码给了我分段错误 这是创建计时器函数的标题: int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid); 请告诉我第二版和第三版有什么不同 另外,既然3可以工作,那么版本1如何编译呢 显然,timer_create的第三个参数在v1和v3中是不同的,但它们都是编译的 此代码失败:(但已编译) 提前谢谢

我需要初始化一个Posix定时器,我让它工作了,但奇迹般地发生了。我不明白工作和代码之间的区别,代码给了我分段错误

这是创建计时器函数的标题:

int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid);
请告诉我第二版和第三版有什么不同

另外,既然3可以工作,那么版本1如何编译呢

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

此代码失败:(但已编译)

提前谢谢

  • 请告诉我第二版和第三版有什么不同

    版本2有以下行和定义:

    initialize_timer(timer_t *tid, int seconds):
        if (timer_create(CLOCK_REALTIME, &sev, &tid) == -1)
    
    tid
    是一个
    timer\t*
    ,因此
    &tid
    是一个
    timer\t**
    ,这与
    timer\u create()
    所期望的不兼容

    第3版有:

    int initialize_timer(timer_t *tidlist, int seconds){
        if (timer_create(CLOCK_REALTIME, &sev, &tidlist[0]) == -1) 
    
    tidlist
    是一个
    计时器*
    ,因此
    &tidlist[0]
    也是一个
    计时器*
    ,这是预期的,并且有效<代码>&tidlist[0]相当于
    tidlist

  • 另外,既然3可以工作,那么版本1如何编译呢

    如果没有警告,版本1将无法编译。注意他们。您有以下代码:

    timer_t *tidlist;
    tidlist = calloc(2, sizeof(timer_t));
    initialize_timer(tidlist[0], 2);
    
    tidlist
    是一个
    计时器*
    ,因此
    tidlist[0]
    是一个
    计时器
    ,这不是
    初始化计时器
    所期望的


  • 1.您需要学习指针和数组。2.您需要在编译器中显示警告。成功编译并不意味着功能正确。忽略编译器中的警告是一个坏主意。版本1没有警告,它编译时没有警告,因此您没有打开足够的警告。在版本1中,我更改了main()中的第三行,如下所示初始化计时器(&tidlist[0],2);现在它工作了(我把&放在tidlist[0]前面,所以现在它工作得很好。)所以你认为我关闭了警告?这是我的makefile“all:gcc-ggdb-lrt-pthread-o jenia_thread thread.cbla bla bla bla bla”。那不是正确的标志吗?
    initialize_timer(timer_t *tid, int seconds):
        if (timer_create(CLOCK_REALTIME, &sev, &tid) == -1)
    
    int initialize_timer(timer_t *tidlist, int seconds){
        if (timer_create(CLOCK_REALTIME, &sev, &tidlist[0]) == -1) 
    
    timer_t *tidlist;
    tidlist = calloc(2, sizeof(timer_t));
    initialize_timer(tidlist[0], 2);