gpt4 book ai didi

linux - 使用 SIGALRM 和计时器时内存损坏

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

好吧,不太确定这是内存损坏还是只是我的代码中的错误,但这是问题的描述:单线程程序注册一个SIGALRM处理程序:

struct sigaction action;
sigset_t blocked;

sigfillset(&blocked);
sigdelset(&blocked, SIGKILL);
sigdelset(&blocked, SIGSTOP);

action.sa_handler = &handler_function;
action.sa_flags = SA_RESTART;
action.sa_mask = blocked;

// We are not interested in the previous action:
if (sigaction(SIGALRM, &action, NULL) == -1)
....

handler_function 是一个简单的函数,它调用对象的函数:

void handler_function()
{
some_object->tick();
}

tick()
{
++variable;
}

变量的类型为长整型。我的程序只有一个 some_object 实例,只有信号处理程序调用函数 tik,并且只有 tik 函数修改变量。其他函数仅读取变量的值。忘了提及我创建了一个计时器:

struct timeval interval;
interval.tv_sec = 0;
interval.tv_usec = (100000);

struct itimerval timer;
timer.it_interval = interval;
timer.it_value = interval;
if (setitimer(ITIMER_REAL, &timer, NULL) == -1)
...

所以tick函数每秒触发10次。现在的问题是,我间歇性地得到对象 some_object 的其他数据成员损坏,它们是 POD 类型(长),即突然它们包含随机值。我尝试在小程序中隔离问题,但无济于事。任何建议将不胜感激。谢谢

最佳答案

您的套接字读取代码中存在缓冲区溢出。解决这个问题,问题就会消失。

关于linux - 使用 SIGALRM 和计时器时内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272436/

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