Estoy estudiando para un examen final y me encontré con una pregunta curiosa que era parte del examen que nuestro maestro le dio el año pasado a algunas almas pobres. La pregunta es más o menos así:¿Qué sucede con los miembros de la clase cuando se usa malloc en lugar de nuevo?
¿El siguiente programa es correcto o no? Si es así, anote qué produce el programa. Si no es así, anote por qué.
El programa:
#include<iostream.h>
class cls
{ int x;
public: cls() { x=23; }
int get_x(){ return x; } };
int main()
{ cls *p1, *p2;
p1=new cls;
p2=(cls*)malloc(sizeof(cls));
int x=p1->get_x()+p2->get_x();
cout<<x;
return 0;
}
Mi primer instinto fue responder con "el programa no es correcto, ya que new
deben utilizarse en lugar de malloc
". Sin embargo, después de compilar el programa y verlo como salida 23
, me di cuenta de que esa respuesta podría no ser correcta.
El problema es que esperaba p2->get_x()
para devolver algún número arbitrario (lo que sucedió que estaba en ese punto de la memoria cuando se llamó malloc
). Sin embargo, devolvió 0. No estoy seguro de si esto es una coincidencia o si los miembros de la clase se inicializaron con 0 cuando es malloc
-ed.
- ¿Es este comportamiento (
p2->x
siendo 0 después demalloc
) el valor por defecto? ¿Debo tener esperado esto? - ¿Cuál sería su respuesta a la pregunta de mi profesor? (Además de olvidarse de
#include <stdlib.h>
paramalloc
: P)
¿Por qué el 0 tampoco puede ser un número arbitrario? –
Aparte de todo lo demás '' debería simplemente ser ''. –
También podría corregir fugas de memoria de su maestro. –