Saltar al contenido

¿En C son malloc(256) y malloc(sizeof(char)*256) equivalentes?

Agradeceríamos tu ayuda para extender nuestras secciones sobre las ciencias de la computación.

Solución:

Sí, C define sizeof(char) ser 1, siempre (y C++ también).

No obstante, como regla general, recomendaría algo como:

char *ptr = malloc(256 * sizeof(*ptr));

De esta manera, cuando su jefe diga algo como: “Oh, por cierto, acabamos de recibir un pedido de China, por lo que debemos manejar los tres alfabetos chinos lo antes posible”, puede cambiarlo a:

wchar_t *ptr // ...

y el resto puede quedar igual. Dado que va a tener alrededor de 10 millones de dolores de cabeza tratando de manejar i18n incluso a la mitad de manera razonable, vale la pena eliminar incluso algunos. Eso, por supuesto, asume el caso habitual de que su chars realmente están destinados a contener caracteres: si es solo un búfer sin procesar de algún tipo, y realmente desea 256 bytes de almacenamiento, independientemente de cuántos (o pocos) caracteres puedan ser, probablemente debería quedarse con el malloc(256) y terminar con eso.

El problema ni siquiera debería existir. Deberías adoptar un lenguaje más elegante al escribir tu malloces como

ptr = malloc(N * sizeof *ptr)

es decir, evite mencionar el nombre del tipo tanto como sea posible. Los nombres de tipo son para declaraciones, no para sentencias.

De esa manera tu mallocs siempre será independiente del tipo y se verá consistente. El hecho de que la multiplicación por 1 sea superflua será menos obvio (ya que algunas personas encuentran la multiplicación por sizeof(char) irritante).

Son equivalentes, pero es bueno mantener la coherencia. También lo hace más explícito, por lo que es obvio lo que quieres decir. Si el tipo cambia alguna vez, es más fácil averiguar qué código debe actualizarse.

Sección de Reseñas y Valoraciones

Si te gusta la informática, tienes la habilidad dejar un artículo acerca de qué te ha gustado de esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *