C/Visual C - Problema curioso con memoria dinamica en c, malloc y printf.

 
Vista:
sin imagen de perfil

Problema curioso con memoria dinamica en c, malloc y printf.

Publicado por anonymous (1 intervención) el 18/01/2019 04:51:02
Hola, buen dia.
Gracias por leerme.

Recientemente estaba repasando algunos códigos de lenguaje c que utilizan la función malloc, este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
main()
{
	char *a, b[80];
	gets(b);
	if((a=(char *)malloc(strlen(b)))==NULL)
	{
		printf("Sin asignacion de memoria\n");
		getchar();
		free(a);
		exit(0);
	}
	strcpy(a,b);
	printf("%s\t%s",a,b);
	getchar();
	free(a);
}

Lo que se hace es detectar el retorno de NULL en la función malloc(). Si al ejecutar el programa, el ejecutor del programa oprime la tecla return (enter), se mostrará en monitor “Sin asignación de memoria”. De otra forma se mostrará dos veces lo escrito por el ejecutor del programa.

Mi problema radica en que cuando das enter y la condición NULL se cumple, nunca se imprime en pantalla el mensaje sin asignación de memoria, solo se muestra una tabulación, depsues entra la función getchar() y el programa se cierra.
Adjunto imagen para que lo aprecien
Captura-de-pantalla-51

No se como puedo solucionar ese error de mi computador, ¿Qué podría ser?, en otro ordenador funciona como debería.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema curioso con memoria dinamica en c, malloc y printf.

Publicado por Tom (619 intervenciones) el 18/01/2019 09:03:43
Tu problema es que malloc(0) no tiene por qué devolver NULL, algo que parece que tú das por hecho.
Copio y pego del man de malloc (que deberías haber leído):

"If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free()."
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar