реклама на сайте
подробности

 
 
> Правильно ли так использовать функцию calloc?
011119xx
сообщение Oct 5 2011, 03:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Работаю в Keil ARM. Проект под STM32. Пытаюсь разобраться с файлом gif. Использую библиотеку libungif-4.1.4. Приведу только часть кода в которой возникла проблема:
Код
typedef unsigned char GifByteType;

typedef struct GifColorType
{
    GifByteType Red, Green, Blue;
} GifColorType;

typedef struct ColorMapObject
{
    int ColorCount;                        
    int BitsPerPixel;                    
    GifColorType *Colors;                
} ColorMapObject;

    ...............

    BitsPerPixel = 8;

    ColorMap = (ColorMapObject *)malloc(sizeof(ColorMapObject));        

    if(ColorMap == (ColorMapObject *) NULL)                             
    {
        FATFileClose(fd);                                                

        return 0;        
    }

    ColorMap->Colors = (GifColorType *)calloc(1 << BitsPerPixel, sizeof(GifColorType));    

    if(ColorMap->Colors == (GifColorType *) NULL)                         
    {
        free((ColorMapObject *)ColorMap);                                  
        FATFileClose(fd);                                                

        return 0;                                                        
    }

    ..........


В данном куске кода выделяется память под глобальную палитру. Выделить то надо всего 768 байт. Память по функции malloc выделяется. А вот по calloc нет. Первая мысль, которая возникла, это не хватает памяти. Но такое не может быть, так как на борту 96 кило памяти и ей просто некуда деться. И вторая мысль - неправильное использование функции calloc. Есть у кого какие соображения?

Сообщение отредактировал 011119xx - Oct 5 2011, 03:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Idle
сообщение Oct 5 2011, 05:17
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



использование функции calloc - правильное
CODE
$ cat el.c
#include <stdlib.h>
#include <stdio.h>

typedef unsigned char GifByteType;

typedef struct GifColorType {
GifByteType Red, Green, Blue;
} GifColorType;

typedef struct ColorMapObject {
int ColorCount;
int BitsPerPixel;
GifColorType *Colors;
} ColorMapObject;

static const int BitsPerPixel = 8;

int main()
{
ColorMapObject *ColorMap = malloc(sizeof(ColorMapObject));
if(!ColorMap)
abort();

ColorMap->Colors = calloc(1 << BitsPerPixel, sizeof(GifColorType));
if(!ColorMap->Colors)
abort();

exit(EXIT_SUCCESS);
}
$ gcc el.c -std=gnu99 -Wall -o el
$ ./el
$


Сообщение отредактировал Idle - Oct 5 2011, 05:21
Go to the top of the page
 
+Quote Post
011119xx
сообщение Oct 5 2011, 05:39
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Цитата(Idle @ Oct 5 2011, 11:17) *
использование функции calloc - правильное

Не вижу принципиальных отличий вашего и "моего" варианта.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 011119xx   Правильно ли так использовать функцию calloc?   Oct 5 2011, 03:47
|- - Idle   Цитата(011119xx @ Oct 5 2011, 09:39) Не в...   Oct 5 2011, 06:21
- - demiurg_spb   Принципиальная разница между calloc и malloc лишь ...   Oct 5 2011, 05:27
- - Сергей Борщ   QUOTE (011119xx @ Oct 5 2011, 06:47) Перв...   Oct 5 2011, 11:07
|- - 011119xx   Цитата(Сергей Борщ @ Oct 5 2011, 17:07) А...   Oct 5 2011, 11:28
- - 011119xx   Увеличил размер кучи, теперь с выделением памяти п...   Oct 6 2011, 03:00
|- - barabek   А так? Кодfor(i = 0; i < 4; i++) ...   Oct 6 2011, 03:54
|- - Палыч   Параметр функции tolower является не строка, а сим...   Oct 6 2011, 04:05
|- - demiurg_spb   Цитата(011119xx @ Oct 6 2011, 07:00) В че...   Oct 6 2011, 05:15
- - 011119xx   Можно ли в процессе отладки где-то посмотреть скол...   Oct 10 2011, 10:48
- - demiurg_spb   Цитата(011119xx @ Oct 10 2011, 14:48) Мож...   Oct 10 2011, 11:15
- - Сергей Борщ   QUOTE (demiurg_spb @ Oct 10 2011, 14:15) ...   Oct 10 2011, 11:53
- - 011119xx   Цитата(demiurg_spb @ Oct 10 2011, 17:15) ...   Oct 11 2011, 01:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 08:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01536 секунд с 7
ELECTRONIX ©2004-2016