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

 
 
> Правильно ли так использовать функцию 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
Ответов
011119xx
сообщение Oct 6 2011, 03:00
Сообщение #2


Местный
***

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



Увеличил размер кучи, теперь с выделением памяти проблем нет.

Есть еще одна не понятная проблема. Для проверки расширения файла использую процедуру:
Код
int extcheck(char *s, char *match)
{              
    char tmp[5];
    uint8_t i;

    if(strlen(s) > 3)                                 
    {
        strncpy(tmp, s + strlen(s) - 4, 4);            
        tmp[4] = 0;                                 

        tolower(*tmp);                        
        if(strcmp(tmp, match) == 0)                     
            return 1;                                
    }
              
    return 0;                                        
}

Проблема в функции tolower. Не хочет она переводить символы из верхнего регистра в нижний. Пробовал вместо
Код
tolower(*tmp);

и так:
Код
for(i = 0; i < 4; i++)
    tolower(tmp[i]);

тоже не работает. В чем может быть проблема?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 6 2011, 04:05
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Параметр функции tolower является не строка, а символ. Возвращает эта функция букву в нижнем регистре, если это была латинская буква в верхнем регистре, иначе - то же значение. Для преобразования символов строки Вам необходимо оргинизовать простой цикл по свем символам этой строки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 011119xx   Правильно ли так использовать функцию calloc?   Oct 5 2011, 03:47
- - Idle   использование функции calloc - правильное CODE...   Oct 5 2011, 05:17
|- - 011119xx   Цитата(Idle @ Oct 5 2011, 11:17) использо...   Oct 5 2011, 05:39
|- - 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
|- - barabek   А так? Кодfor(i = 0; i < 4; i++) ...   Oct 6 2011, 03:54
|- - 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 Текстовая версия Сейчас: 28th July 2025 - 08:13
Рейтинг@Mail.ru


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