calloc
инициализирует память перед ее использованием, но malloc
нет.
См. эту ссылку:
Функция calloc () должна выделить неиспользуемое пространство для массива элементов nelem, размер каждого из которых в байтах равен elsize. Пространство должно быть инициализировано всеми битами 0.
С malloc
, если вы хотите гарантировать тот же эффект, вам придется вызвать что-то вроде memset для сброса памяти, например
char* buffer = (char*)malloc(100);
memset(buffer,0,100);
calloc
избавит вас от лишнего шага. Значение инициализации памяти состоит в том, что вы переводите переменную в известное состояние, а не в неизвестное. Поэтому, если вы проверяете переменную, скажем, элемент массива, на предмет ожидаемого значения, то, предварительно инициализировав переменную заранее, вы можете быть уверены, что проверяемое значение не является мусором. Другими словами, вы можете отличить мусор от допустимых значений.
Например, если вы просто оставляете мусор в переменной и проверяете какое-то значение, скажем 42, тогда у вас нет возможности узнать, действительно ли значение было установлено на 42 вашей программой, или это просто остаток мусора, потому что вы не инициализировал его.
person
dcp
schedule
10.08.2010