LINUX.ORG.RU

pthread arg address confusing

 


0

1

Есть элементарная программа. Почему адрес структуры thr1_arg в функции-потоке отличается от адреса, передаваемого в pthread_create

struct thread_arg
{
        myclass<unsigned> *p;
        unsigned thr_num;
};

void *thr_fun(void *arg)
{
        thread_arg *cxt = (thread_arg *)(arg);
        printf("arg %p\n", arg);

        return (void *)0;
}

int main(void)
{
        int err;
        pthread_t t;
        myclass<unsigned> mc;

        thread_arg thr1_arg;
        thr1_arg.p = &mc;
        thr1_arg.thr_num = 1;

        printf("thr1_arg.p = %p &mc = %p &thr1_arg = %p\n", thr1_arg.p, &mc, &thr1_arg);

        err = pthread_create(&t, NULL, thr_fun, &thr1_arg);

        printf("2\n");
Получаю следующий вывод
thr1_arg.p = 0xbf816a18 &mc = 0xbf816a18 &thr1_arg = 0xbf816a10
2
arg 0xbf816a08


Вообще хрень какая-то. Что печатает строчку «2»? Почему выводимые адреса отличаются по длине на один знак (вначале 8 знаков, потом 7 знаков)?

Krieger_Od ★★ ()
Ответ на: комментарий от Krieger_Od

Спасибо, вопрос закрыт. Это был вывод arg из другого потока, отсюда другое значение

Afx33 ()
Ответ на: комментарий от Afx33

Молодец, никогда не парься тем, чтобы дать точный полный код людям, которые могут помочь.

Krieger_Od ★★ ()
Ответ на: комментарий от Krieger_Od

Я прощу прощения, «заклинило» на ерунде какой-то

Afx33 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.