我需要初始化一个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)
提前致谢。
请告诉我版本2和版本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
。
另外,鉴于3可行,版本1甚至如何编译?
没有警告,版本1不会编译。注意他们。您有以下代码:
timer_t *tidlist;
tidlist = calloc(2, sizeof(timer_t));
initialize_timer(tidlist[0], 2);
tidlist
是timer_t *
,那么tidlist[0]
是timer_t
,这是不是有什么initialize_timer
期待。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句