malloc(sizeof(_Bool)) (GCC 4.5.0)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

malloc(sizeof(_Bool))

Сообщение BratSinot »

Когда я делаю:

Код: Выделить всё

_Bool *temp1;
temp1 = malloc(sizeof(_Bool));
if(!*temp1)
{
 fprintf(stderr, "Не хватает памяти *temp1\n");
 exit(1);
}

То он у меня выводит что "Не хватает памяти". Если поменять допустим с _Bool на int то все в порядке будет.
Вопрос: Почему? Я знаю что _Bool всегда должен 1 байт занимать и можно его цифрой указать, но почему через sizeof(_Bool) не работает?

Компилятор: GCC 4.5.0

P.S. Только что попробовал по другому:

Код: Выделить всё

_Bool *temp1;
temp1 = malloc(1);

Тот-же эффект. Чем malloc не нравится _Bool?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: malloc(sizeof(_Bool))

Сообщение Portnov »

Там же, перед fprintf(), впишите вызов perror(), чтобы посмотреть, что за ошибка-то случается. Подозреваю, что malloc() не умеет выделять память по одному байту.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: malloc(sizeof(_Bool))

Сообщение serzh-z »

А нафига указатель-то разыменовывать?

Должно быть "if(!temp1)".
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: malloc(sizeof(_Bool))

Сообщение eddy »

А что за тип такой _Bool? Сами сделали?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: malloc(sizeof(_Bool))

Сообщение BratSinot »

eddy писал(а):
23.04.2010 15:54
А что за тип такой _Bool? Сами сделали?

Почитай спецификации 'C99'. Есть 'C89' есть 'C99'. Так вот в 'C99' есть такой тип данных '_Bool'. Он похож на 'bool' из 'C++', за исключением того что в 'C++' есть 'true' и 'false', а в 'C99' нет. Но можно подключить 'stdbool.h', тогда он будет совместим с 'bool'.


serzh-z писал(а):
23.04.2010 15:29
А нафига указатель-то разыменовывать?

Должно быть "if(!temp1)".

О, спасибо. Как всегда какую нибудь мелочь и не видно.
Спасибо сказали: