O con ruta relativa (relativa al directorio actual de trabajo), suponiendo que estemos ya en el directorio usuario y asumiendo que el directorioX exita:
Si hay inconveniente ya que si por ejemplo en el realloc se mueve el bloque de memoria a otro lado, b va a seguir con el mismo apuntador.
Esto es
B apunta a 1000 (Direccion de memoria) Se pide a reelloc que reasigne el espacio para agregar X cantidad adicional a la existente. Realloc mueve el bloque que estaba en 1000 al bloque 2000 y retorna la nueva dirección de memoria Si B no se iguala a lo que devuelva realloc, entonces B seguira apuntado a 1000, si, ahi siguen tus valores anteriores, pero digamos que existe una variable C en la direccion 1003, entonces cuando tu escribas en tu apuntador B en esa posicion, estaras sobreescribiendo la variable C.
¿Que es lo que ocurre si hago free ( b ); y continuo usando a?
al hacer free, el programa marca el segmento de memoria dado como libre y si lo sigues usando podria ser sobreescrito en cualquiero otro momento por otra variable de tu programa.
¿El valor de retorno de realloc apunta a la nueva dirección con los datos que contenía el primer argumento (en este caso a[0] debería ser 20 y tendría que tener espacio para un int más)?
Si el valore regresado es el nuevo, podria ser el mismo o no, sin embargo veo que estas asignando a la variable "a" pero sigues usando "b", en el caso de que te devuelva una direccion diferente, b ya no aputara mas a un rango de memoria "asignado". b continua con una copia vieje del apuntador.
Por cierto asegurate de Inicializar la variable que le pasas por primera vez a realloc en NULL ya que es posible que contenga basura en la memoria y te marque segment fault Tengo aqui un video que realice sobre el tema:
Entonces deberías de cambiar el como trabajan esas funciones.
El detalle esta en que no se deberia de llamar a main. Tendrias que tener una función que inicialize el tablero y deje todas las variajes como si nunca si hubiera jugado.
Por ejemplo para reinicializar el tablero
Código
int main(){
bool entrar =true;
char tateti[3][3];
do{
for(int i =0; i <3;i++){
for(int j =0; j <3;j++){
tateti[i][j]='1'+(i*3)+ j;
}
}
//Inicilizar TATETI, Rellenar la Matriz etc...
//JUGAR
//Evaluar si el usuario quiere salir
if(something == other){
entrar =false;
}
}while(entrar);
}
Asi en cada do el tablero estaria inicializado como la primera vez.
Tendrías que realizar algo similar para las otras variables
Hola acabo de validar el siguiente codigo y no funciona, YA QUE EL CMD de WINDOWS procesa algunas Teclas Especiales FX y no las pasa al programa en ejecucion.