如果没有出现Seg Fault错误,无法让Make工作

时间:2013-12-16 22:51:04

标签: c makefile

抱歉新手提问。

我的程序是经典的迷宫求解器程序。在同一个文件上,功能和一切都很好用。但是,为了更清洁地使用,我现在尝试将它们分开并使用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

干杯!

1 个答案:

答案 0 :(得分:0)

固定。该函数在函数文件的石南花和主文件中都被声明了两次。

干杯!