el unico puntero que no libero es el que le asigno directamente a la zona de memoria que usa la tarjeta por que el espacio ya esta reservado(digo yo). y el que yo hago lo libero al final. Las definiciones de punteros las hago asi:
//antes de las funciones
unsigned char *vga = (unsigned char *)MK_FP(0xa000,0);
unsigned char *vgaAux;
//con este en una funcion voy creando la imagen
memset(vgaAux + ((defx * j) + i) , codigo, rep);
//y al final de esa funcion lo muevo a la memoria de video
memcpy(vga , vgaAux, (size_t)64000);
//en el main reservo memoria para este puntero
vgaAux = (unsigned char *)malloc((size_t)64000);
//y lo libero al final del main
free(vgaAux);
//he probado a asignarle memoria en la definicion al principio del programa pero sigue igual, asi que debe de estar el error en algunas de las definiciones o asignaciones que aqui muestro
//antes de las funciones
unsigned char *vga = (unsigned char *)MK_FP(0xa000,0);
unsigned char *vgaAux;
//con este en una funcion voy creando la imagen
memset(vgaAux + ((defx * j) + i) , codigo, rep);
//y al final de esa funcion lo muevo a la memoria de video
memcpy(vga , vgaAux, (size_t)64000);
//en el main reservo memoria para este puntero
vgaAux = (unsigned char *)malloc((size_t)64000);
//y lo libero al final del main
free(vgaAux);
//he probado a asignarle memoria en la definicion al principio del programa pero sigue igual, asi que debe de estar el error en algunas de las definiciones o asignaciones que aqui muestro