Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > непонятный глюк


Автор: intel 19.2.2010, 19:24
Тридцать просмотров и ни одного ответа. Полагаю вопрос не совсем понятен. Буду проще.
Функция подсчитывает количество символов в файле и запихивает структуры в поле zeichen
Код

static void anzahl_ermitteln(FILE *input_file, ZEICHEN *zeichen[])
{
    IS_NO_NULL_POINTER(input_file);
    IS_NO_NULL_POINTER(zeichen);

    char z = fgetc(input_file);

    while (z != EOF)
    {
        /* если структура для этого символа уже есть... */
        if (zeichen[z] != NULL)
        {
            /* увеличивай количество этих символов на один */
            zeichen_inkrement_anzahl(zeichen[z]);
        }
        else
        {
            /* иначе создаю структуру для этого символа и запихиваю указатель на неё в поле zeichen */
            zeichen[z] = zeichen_new(z);
        }
        z = fgetc(input_file);
    }
}

Так вот, после вызова этой функции, любые выделения памяти приводят к ошибке. Например:
Код

ZEICHEN *zeichen[256] = {NULL};
anzahl_ermitteln(input_file, zeichen);
//int *x = NULL;             //приводит к ошибке

Помогите пожалуйста, очень надо

Автор: borisbn 21.2.2010, 16:33
попробуй вместо char z определить unsigned char z, т.к. при z > 127, получается отрицательный индекс в zeichen[z]

Автор: xvr 26.2.2010, 15:29
Цитата(borisbn @ 21.2.2010,  16:33)
попробуй вместо char z определить unsigned char z, т.к. при z > 127, получается отрицательный индекс в zeichen[z]

Точне, он должен быть int. Иначе цикл while (2мя строками ниже) никогда не закончится

Автор: borisbn 26.2.2010, 15:49
xvr, да, конечно.
Давно не брал в руки шашки ( чистый Cи ) smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)