Asignar valores a un puntero nulo desreferenciado

Estoy haciendo una clase en c ++ que admite cualquier tipo de variable para ayudarme en un proyecto futuro. El problema es que cuando bash asignar un valor a una variable void* aparece el error: void* no es un tipo de puntero a objeto. Aquí está el código:

 int main (void) { void* a; int x; a = malloc(sizeof(int)); x = 120; ((int)(*a)) = x; printf("%d",((int)*a)); free(a); system("pause"); return 0; } 

Lo veo como si estuviera tratando de asignar el valor de x en el bloque de memoria reservado para a. Quiero que el valor almacenado en x se almacene en el bloque de memoria de a. ¿Puede alguien ayudarme?

Probablemente quieras hacer:

 void* a; int x; a = malloc(sizeof(int)); x = 120; *(int*)a = x; printf("%d", * (int*)a); free(a); 

Lo estás haciendo demasiado complicado. Simplemente emita a para ser un int * , o mejor aún, declare a como int * para empezar.

 int x = 120; int * a ; // now just cast the result from malloc as int* if((a = (int *)malloc(sizeof(int))) == NULL){ //ALWAYS check exit(-1); } *a = x; 

Hay formas más astutas de hacer cosas similares en C ++, pero parece que te encuentras principalmente atrapado en la syntax del puntero.

Necesita la conversión como *(int*)(a) = x; .

En primer lugar, debe convertir a tipo de puntero al tipo apropiado y, a continuación, anular la referencia. En segundo lugar, usa una plantilla, para eso están. En tercer lugar, malloc y free es baaaad, ok? No lo hagas Si crees que este es un buen código, necesitas un remedio C ++ serio. En cuarto lugar, esto ya está hecho, boost::any sirve para este propósito.

Hay otras formas elegantes de asignar una variable de diferentes tipos. Para su pregunta actual puede seguir el camino estándar como,

 int* const a = new int; //... *a = 120; //... delete a; 

O simplemente para este problema específicamente,

 int a = 120; // simple 

[Nota: en su solución actual si lo hace,

 *((int*)(a)) = x; 

podría estar rompiendo la regla estricta de aliasing.]