|
Дата: 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.
Для начала хватит  |