Re[2]: Правильно ли используется выделение памяти и пользова
От: vis1979  
Дата: 18.11.06 10:00
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Это, похоже, именно С...


Да, это С, компиляция производиться на 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;
 }

Так???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.