calloc(x,y)
es un equivalente a malloc(x*y)
Pero calloc
hacer (valores de ajuste a 0 con) adicionales memset(block, 0, x*y)
Esta función es sólo para bastante manera pasan el tamaño del elemento y número de elementos , cuando en malloc debe multiplicar estos valores para obtener el número necesario de bytes, esta función también comprueba el desbordamiento de enteros en la multiplicación.
Por ejemplo, si desea asignar memoria para 12 números enteros y quiere hacer algo con esta enteros y debe haber enchufar sus valores a 0, utilice calloc(12, sizeof(int))
Pero si desea asignar parte del bloque de memoria (256 bytes) para copiar en el futuro para que un trozo de cuerda y luego memset
un producto no es adecuado para usted, entonces es mejor uso malloc(sizeof(char) * 256)
o, por ejemplo malloc(sizeof(wchar_t) * 256)
void *
calloc (size_t nmemb, size_t lsize)
{
void *ptr;
struct __meminfo *info;
size_t size = lsize * nmemb;
/* if size overflow occurs, then set errno to ENOMEM and return NULL */
if (nmemb && lsize != (size/nmemb))
{
set_errno (ENOMEM);
return NULL;
}
/* allocate memory */
ptr = malloc (size);
/* get pointer to info part of chunk */
info = __mem2info (ptr);
/* fill memory with zeros and set __MEM_CALLOC flag */
memset (ptr, 0, info->size);
info->flags |= __MEM_CALLOC;
return ptr; /* happy end */
}
Ver [Es calloc (4, 6) lo mismo que calloc (6, 4)?] (Http://stackoverflow.com/questions/501839/is-calloc4-6-the-same-as-calloc6- 4). –
@Matthew ¡Gracias! No tenía ni idea de esto. – sanjoyd