Closed romamati closed 2 years ago
Más allá de "no funciona", ¿pudiste comprobar si no encuentra ninguna palabra o solo algunas? Por ejemplo, cuando hacés for(int i = pos_i ; i<FILS ; i++) / pos_i seria la fila de mi sopa donde empiezo a buscar/
{
for(int j = pos_j; j<COLS; j++)/* pos_j seria la columna de mi sopa donde empiezo a buscar*/
¿no deberíaas usar inc_i y/o inc_j?
Tengo entendido que no porque i representa a la fila y j representa a la columna de mi sopa y luego de eso asigno sus valores en aux_i y en aux_j para poder hacer sobre estos los incrementos y decrementos correspondientes segun la direccion en la que me muevo. (Esto ultimo sucede en el ultimo for donde pongo aux_i+=Inc_i, aux_j+=Inc_j).
Siendo mas claro con el problema lo que sucede cuando intento correr el programa es que el -fsanitize me indica que hubo un error de overflow y me dice que parte de mi funcion "resolverSopa" en la linea donde pongo :
vector_Data = realloc(vector_Data, cant_encontradas * sizeof(Posicion));
y tambien en la linea donde pongo: vector_Data[cant_encontradas].palabra = NULL;
Pero honestamente no encuentro mi error en estas lineas y es por eso que lo queria consultar.
Buenas! Me gustaría saber por qué mi código no funciona. Desde ya muchas gracias.
include
include
define FILS 4
define COLS 4
define DIRECCIONES 8
typedef enum {DER=0, IZQ, ABA, ARR, I_AR, I_AB, D_AR, D_AB } Tdireccion;
typedef struct{ char * palabra; size_t fila; size_t columna; Tdireccion direccion; }Posicion;
Posicion buscarEnDir(char sopa[][COLS], char palabra, int pos_i, int pos_j); Posicion resolverSopa(char sopa[][COLS], char * diccionario[]);
int main(void) { char * diccionario[] = {"ARRE", "CANCION", "CAPA", "ERROR", "ORCO", "PERRO", "PERTINAZ", "REA", "RIO", ""};
}
Posicion buscarEnDir(char sopa[][COLS], char palabra, int pos_i, int pos_j) / char palabra seria la direccion donde esta la palabra. Lo pongo asi para que asi luego le pueda pasar diccionario[pos] como parametro/ { Posicion Data;/ Aca voy a almacenar toda la info si se encuentra la palabra/ int Inc_i, Inc_j,m, aux_i, aux_j, w, flag, encontrada = 0; char Dir_i[] = {0,0,-1,1,-1,-1,1,1};/ En Dir_i tengo los distintos incrementos que le tengo que hacer a la i segun la direccion en la que me muevo/ char Dir_j[] = {1,-1,0,0,1,-1,1,-1};/ En Dir_j tengo los distintos incrtementos que le tengo que hacer a la j segun la direccion en la que me muevo/
}
Posicion resolverSopa(char sopa[][COLS], char diccionario[]) { Posicion vector_Data = NULL; Posicion Data; int cant_encontradas = 0; for(int k = 0 ; diccionario[k][0] != 0; k++)/ Con esto voy a ir pasando de palabra/ { for(int i = 0; i<FILS; i++) { for(int j = 0 ; j<COLS; j++) { if(sopa[i][j] == diccionario[k][0])/ De esta forma solo va a empezar a buscar en la posicion de la sopa donde encuentra la primer letra de la palabra a buscar*/ { Data = buscarEnDir(sopa,diccionario[k],i,j); }
}