Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Это, похоже, именно С...
Да, это С, компиляция производиться на Borland C++ 3.1
АТ>Если это именно C, то
АТ>АТ>...
АТ> struct TimerStruct* tempTimerEl = malloc(sizeof *tempTimerEl);
АТ>...
АТ>
АТ>Т.е. во-первых, никакого приведения типа не надо, и, во-вторых, 'sizeof' лучше натравить на указатель-получатель, а не на тип.
Понятно, спасибо, это я учту, но вот что сказано в helpe на malloc
char *str;
/* allocate memory for string */
if ((str = (char *) malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}
то есть приведение типа явно указано, как я понимаю ошибки в моем описании нет,
и вы представили лишь улучшение или я не до конца что то понимаю?
АТ>Не понятно почему тип возврата — 'void*', а не 'struct TimerStruct*'.

Да собственно и не знаю почему просто tempTimerEl это элемент списка, для которого
выделяется память и заполняются поля, далее возращается в качестве результата функции
чтобы потом по идентификатору tempTimerEl его можно было найти в списке и удалить
вот такой функцией unsigned char DeleteTimer(void * ID_Timer)

опять же с типом void *
то есть по сути TimerKLZ[i] используется в следующем виде DeleteTimer(TimerKLZ[i]);
на самом деле в качестве void* подразумевался просто возвращаемый адрес элемента
в принципе все работает и вроде стабильно, но посто закрались смутные сомнения
правильно ли я выделяю память для списка указателей на void в таком виде:
void ** TimerKLZ;
if ((TimerKLZ= (void **) malloc(sizeof(void *)*CountKLZ))==NULL)
{
return 0;
}
для использования в виде
TimerKLZ[i]=TimerAdd(параметры);
АТ>По-прежнему не понятно, почему массив именно 'void*'-ов...
вопрос а как мне объявить массив указателей на TimerStruct?
таким же образом? "struct TimerStruct ** TimerKLZ;" — ???
и потом выделение
if ((TimerKLZ= (struct TimerStruct **) malloc(sizeof(struct TimerStruct *)*CountKLZ))==NULL)
{
return 0;
}
Так???