for(k = 1; k<=size;k++)
Выделенная память действительна до индекса size - 1
, но k
может доходить до size
;поэтому при записи в v{size]
вы запускаете повреждение памяти.
Далее следует неопределенное поведение , и оно показывает при освобождении буфера (но это могло бы сделать что-то еще, даже если вв этих случаях происходит сбой прямо в строке, где вы перезаписываете память, или при следующей операции с памятью free
или malloc
из-за повреждения списка памяти.)
Лично я склонен избегатьусловия с худшим или равным тестом (k<=size;
) в циклах for
, потому что одноразовые ошибки просты.Лучше вычислить переменную с именем size_plus_one
и использовать k < size_plus_one
.
Выделить еще один элемент, чтобы исправить это:
unsigned int* v = calloc(size + 1, sizeof(int));