2

我有一个计时器线程和该线程的函数,并且必须将参数 size_t 传递给该函数。

void* global::timer_event::entry_point(void* n)
{
    namespace N = global::utils;
    struct timeval tv;
    size_t* s = (size_t*)n;     
    N::set_timer(tv, *s);
    while(1)
    {
        if (N::check_timer(tv, *s) == 1)
        {
            pthread_mutex_lock(&set_queue_mutex);
            N::print_queue(q);
            pthread_mutex_unlock(&set_queue_mutex);
        }
    }
}

void global::timer_event::run(size_t n)
{
    pthread_create(&m_t, 0, &entry_point, (void*)n);
}

但是程序会 N::set_timer(tv, *s); 在你使用*s时崩溃。如何很好地进行这种转换?

4

3 回答 3

3

你的第一个演员来自 size_t

然后你投到. size_t*

这显然是错误的。

将其转换回size_t

于 2013-10-30T08:52:30.073 回答
1
pthread_create(&m_t, 0, &entry_point, (void*)n);

您将 n 的值传递给 threadFunc。例如,如果 n = 0(或其他值),在这些语句中:

size_t* s = (size_t*)n;     
N::set_timer(tv, *s);

*(s = 0) ==> 访问地址 0x0(或其他受保护的内存)==> 访问地址冲突 ==> 崩溃~~BOOM~~

于 2013-10-30T09:00:20.370 回答
0

创建线程时,n 通过 value传递变量,但在线程函数中将其用作指针。您需要将其转换为不是线程函数中的指针。

于 2013-10-30T08:48:55.220 回答