抱歉新手提问。
我的程序是经典的迷宫求解器程序。在同一个文件上,功能和一切都很好用。但是,为了更清洁地使用,我现在尝试将它们分开并使用Make将它们组合在一起。
不幸的是,当我这样做时,我收到了分段错误错误。我似乎无法找到错误,所以我正在寻求帮助。
这些是主文件和功能文件。
谢谢, 杰拉德
主档案:
/*Librerías del sistema*/
#include <stdio.h>
#include <stdlib.h>
/*Librerías específicas del programa*/
#include "laberinto1.h"
/*Defines del programa*/
#define ERR_NUM_PARAM "Numero incorrecto de parametros.\n"
#define ERR_PARAM "El punto (%d, %d) no pertenece al laberinto.\n"
#define ERR_SALIDA "No existe salida desde el punto (%d, %d).\n"
#define ERR_OBSTACULO "El punto (%d, %d) es un obstaculo.\n"
int encuentraRuta (int posv, int posh, char lab[TAMV][TAMH]);
int main (int argc, char *argv[]) {
/* Definición de base y altura */
int altura = atoi(argv[1]);
int base = atoi(argv[2]);
/* Defino la tabla */
char laberinto[TAMV][TAMH] = {LABERINTO};
/* Comprobaciones de números introducidos */
if (argc != 3)
printf(ERR_NUM_PARAM);
else if (altura >= TAMV || base >= TAMH)
printf(ERR_PARAM, altura, base);
else if (laberinto[altura][base] == '#')
printf(ERR_OBSTACULO, altura, base);
else {
encuentraRuta (altura, base, laberinto);
/* Ints */
int v;
int h;
/* Imprimo el laberinto */
for (v = 0; v < TAMV; v++){
for (h =0; h < TAMH; h++)
printf("%c", laberinto[v][h]);
printf ("\n");
}
return 0;
}
}
功能文件:
/* Defines e includes*/
#include <stdio.h>
#include <stdlib.h>
#include "encruta1.h"
#include "laberinto1.h"
int encuentraRuta (int posv, int posh, char lab[TAMV][TAMH]) {
/* Variable de control que le indicará a las recursivas si la anterior ha encontrado un hueco sin obstáculo */
int resuelto = NO;
/*Si está en el borde, será el fin de la función ya que será la solución*/
if ((posh == 0) || (posv == 0) || posh == (TAMH - 1) || posv == (TAMV - 1))
resuelto = SI;
/* Si no está en el borde, comenzamos las recursivas a comprobar todos los huecos pegados a el actual */
else {
lab[posv][posh] = 'o'; /* Se marcan los huecos "leidos" */
if (lab[posv][posh + 1] == '.')
resuelto = encuentraRuta(posv, posh + 1, lab);
if ((lab[posv][posh - 1] == '.') && (resuelto == NO))
resuelto = encuentraRuta(posv, posh - 1, lab);
if ((lab[posv + 1][posh] == '.') && (resuelto == NO))
resuelto = encuentraRuta(posv + 1, posh, lab);
if ((lab[posv - 1][posh] == '.') && (resuelto == NO))
resuelto = encuentraRuta(posv - 1, posh, lab);
}
/* Se marcan las soluciones correctas con * */
if (resuelto == SI )
lab[posv][posh] = '*';
return resuelto;
}
Makefile文件:
laberinto1: laberinto1.o encruta1.o
gcc -o laberinto1 laberinto1.o encruta1.o
laberinto1.o: laberinto1.c laberinto1.h
gcc -W -Wall -c laberinto1.c
encruta1.o: encruta1.c encruta1.h
gcc -W -Wall -c encruta1.c
borra:
rm *.o
干杯!
答案 0 :(得分:0)
固定。该函数在函数文件的石南花和主文件中都被声明了两次。
干杯!