QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Friday, 21 Nov 2008 09:24
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Программирование под Photon —› вопрос по указателям

Посл.ответ Сообщение


Дата: 31 Июл,  15:11

Задачка простая, только один указатель не получается наладить. Есть текстовое поле, из которого берётся слово и добавляется в комбобокс. Всё работает корректно до место, отмеченного "на вылет". Там мне не понятно, что надо ставить перед items, именно из-за этоог происходит сбой. Кто-нибудь может подсобить?)

short *num;
char **items, *word;
PtArg_t arg[1];
int i;

PtSetArg( &arg[0], Pt_ARG_TEXT_STRING, &word, 0);
PtGetResources( ABW_text_field, 1, arg);
memset( arg, 0, sizeof( arg));
PtSetArg( &arg[0], Pt_ARG_ITEMS, &items, &num);
PtGetResources( ABW_combo_box, 1, arg);
i = (int)*num;
items[i] = *&word;
memset( arg, 0, sizeof( arg));
PtSetArg( &arg[0], Pt_ARG_ITEMS, items, num+1);//на вылет!
PtGetResources( ABW_combo_box, 1, arg);


Дата: 31 Июл,  15:17

Хотя в 11й строчке надо даже так записать:
items[i] = word;
потому что * и & взаимоисключающие операции


Дата: 31 Июл,  16:54

Что это за шухер вообще ???

Зачем :
memset( arg, 0, sizeof( arg));
если потом делаешь PtSetArg() ?

items[i] = word;
Так делать нельзя, потому что items указывает на некую служебную память компонента. К тому же копировать строки в данном случае надо через strcpy(), а не простым присвоением указателя.

int i;
вообще не нужен, т.к. можно обойтись (*num)

PtSetArg( &arg[0], Pt_ARG_ITEMS, items, num+1);
Сравни с предыдущим вызовом PtSetArg. Как минимум 2 ошибки.

Для установки ресурсов надо вызывать PtSetResources, а не PtGetResources.

Для начала хватит

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source