Итак, есть простенькая функция для аллокации памяти:
Код:
void* allocate(unsigned int size) {
return = malloc(size);
Этот простой код должен возвращать указатель на блок памяти выделенный функцией malloc, но она не работает!
Код компилируется, но при запуске программы она падает. Дебаг в эклипсе показал что проблема именно в этой функции - при выполнении следующего кода
Код:
void *v = allocate(8);
В переменной v вместо адреса оказывалось вот это:
v Error: Multiple errors reported.\ Failed to execute MI command: -var-create - * v Error message from debugger back end: Attempt to dereference a generic pointer.\ Unable to create variable object
Изменяем код функции:
Код:
void* allocate(unsigned int size) {
char *c = (char*)malloc(size);
return (void*)c;
Значение указателя c представляет собой валидный адрес, но при конвертации в обычный указатель он портится.
Почему так происходит? Ведь стандартная функция malloc спокойно возвращает void*. И как надо переписать функцию, чтобы она нормально работала?