Dev - C++ - Marca Error

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Marca Error

Publicado por Laura (5 intervenciones) el 10/11/2020 04:10:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<string.h>
#include<string.h>
int main(){
	int *p1;
	p1=malloc(sizeof(int));
	if(p1==NULL){
		printf("Memoria Llena \n");
	}else{
		printf("Hay Espacio \n");
		*p1=15;
		printf("\n\n%i",*p1);
	}
	free(p1);
	printf("\n\n%i\n",*p1);
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder

Marca Error

Publicado por Nacho (181 intervenciones) el 10/11/2020 07:13:28
1
p1 = (int*)malloc(sizeof(int));
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
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Marca Error

Publicado por Rodrigo (539 intervenciones) el 10/11/2020 16:32:35
Una sugerencia de mejora de tu programa es mover el free y el print de las lineas 14 y 15 al interior del else.
free solo tiene sentido si el malloc tuvo exito. El print lo mismo. Dado que el else ya tiene un print similar, sugiero borrar el repetido.
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
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Marca Error

Publicado por Martín (158 intervenciones) el 10/11/2020 17:55:55
En mi humilde opinión...

Dos cositas...

Si realmente el error que dices (aunque no muestras) está en
1
p1=malloc(sizeof(int));
se bebe a que estás usando un compilador de C++ para compilar un programa C. En este caso tienes dos opciones; si quieres compilar con C++ está bien que hagas un cast a int, como te sugiere Nacho; si la idea es compilar un programa C con un compilador de C, deberías usar uno.

La otra, comentando el comentario de Rodrigo, si el sistema no tiene memoria libre suficiente para alojar un puntero a int, es porque está todo tan arruinado que ya no merece la pena hacer otra cosa más que abandonarlo a su (merecida) suerte. printf() también va a invocar a malloc, así que figúrate; es como ir a ver por qué no explotó el petardo, para decirlo gráficamente.
1
2
3
4
if(p1==NULL){
		// bahhhh
		exit(1);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar