Функция malloc
выделяет только память.
Функция calloc
выделяет память , а"очищает" память ( установка всех байтов в ноль).
Короче говоря, calloc
эквивалентно malloc
, за которым следует вызов memset
.
Если честно, почти любая приличная книга, учебник или класс должны были содержать эту информацию.
Что касается кода, который вы показываете, вам не нужно использовать calloc
, так как вы все равно перезапишете всю память.
Однако существуют другие проблемы с вашим кодом ...
Первое, что вы забыли, что в C все аргументы передаются по значению, что означает, что значение, которое вы используете при вызов функции скопирован , а внутри функции все, что у вас есть, - это копия, с которой можно работать. Так, например, когда вы присваиваете image
, вы назначаете только локальную копию переменной. Исходный указатель, который вы использовали при вызове функции reflect
, не будет изменен назначением. Чтобы решить эту проблему, вам нужно скопировать память из tmp
в image
.
Другая проблема заключается в том, что вы набираете free
на tmp
после назначения image
. Если назначение сработало так, как вы хотели (а это не так, см. Выше), тогда оба указатели image
и tmp
станут недействительными при вызове free
(как оба указателя) одинаковы и указывают на одну и ту же память). К счастью, эта проблема является спорным, как только вы решали проблему копирования, и вы можете free
указатель tmp
без проблем.