LINUX.ORG.RU

Что не нравится valgrind? (invalid write of size 4)

 ,


0

2
SmlErrors SmlWhsAdd(SmlElement element, SmlIndex * index)
{
    SML_CHECKPTR(index);

    SmlElement * ptrold = warehouse.elem;

    warehouse.elem      = realloc(warehouse.elem,
                                  (++warehouse.elemcount) * sizeof(SmlElement));
    if (!(warehouse.elem))
    {
        warehouse.elem = ptrold;
        *index         = 0;
        warehouse.elemcount--;
        return SML_ERR_BADALLOC;
    }

    warehouse.elem[warehouse.elemcount - 1] = element;

    *index = (warehouse.elemcount - 1); // <---- Здесь
    return SML_ERR_SUCCESS;
}

Снаружи приходят адекватные данные.



Последнее исправление: Edible (всего исправлений: 1)
Ответ на: комментарий от beastie

в корне не верно

Ага, как обычно Цари Сишки выпендриваются (тот выверт с использованием realloc), ухудшая читаемость, а потом ловят шальные баги.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

PS: Edible, вместо realloc и заката солнца подсчёта элементов в ручную, лучше было бы использовать sys/queue.h — отпадёт сразу целый класс багов.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от i-rinat

Premature optimisation ... скорее всего это не тот случай, где об «вымывании кеша» стоит серьёзно задумываться.

К тому же именно эти списки повсеместно используются в ядре (как минимум в obsd), а это хоть о чём-то, да говорит.

beastie ★★★★★
()
Ответ на: комментарий от beastie

В ядре — специфичные задачи, где бвстрое добавление важнее быстрого итерирования.

i-rinat ★★★★★
()
Ответ на: комментарий от beastie

Меня забавляет, как обосновывают не использование одних фич преждевременной оптимизацией, но почему-то забывают обосновать использование их замены. Видимо потому, что причина использования вторых — невежество.

anonymous
()
Ответ на: комментарий от anonymous

Вообще-то в данном случае обоснование было.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.