programa @C compilado com cygwin no Windows funciona, falha de segmentação no Linux. O cygwin GCC é "ruim"?

Para minha classe de programação 102, somos solicitados a fornecer código C que compila e executa no Linux. Não tenho espaço livre suficiente no disco rígido para instalar o Linux no Windows e, portanto, uso o cygwin para compilar meus programas.

O programa mais recente que tive que apresentar compila e roda bem no cygwin. Compila bem no Linux, mas no meio da execução produz uma falha de segmentação. Expliquei isso ao aluno de pós-graduação que nos dá aula e ele disse que a versão do cygwin do GCC permite que o código mais superficial seja compilado e executad

As poucas referências que encontrei via google não foram conclusivas. Um tópico que encontrei disse que a causa da falha seg no Linux é um vazamento de memória. Por que isso não afetaria a versão do cygwin?

Eu usaria os computadores da Universidade, mas não posso usar o Subversion neles, o que prejudicaria significativamente meus esforços. (Sou iniciante em codificação e geralmente preciso poder reverter para as revisões X atrás).

A versão do cygwin do GCC é realmente mais "relaxada" com o código que compila? Em caso afirmativo, existem problemas óbvios a serem observados ao codificar? Existem alternativas para escrever código que será executado no Linux?

Edita

Obrigado pelas respostas. Eu não fui explícito o suficiente no meu post original: o fato de haver um bug no meu código era praticamente um dado para mim (eu sou bastante novo em programação e realmente verde quando se trata de C, afinal). O GCC do meu cygwin, implicado por TA, é um compilador menos confiável - permitindo a execução de códigos muito mais desleixados - do que o encontrado no GNU / Linux. Achei isso estranho e fiz uma pesquisa na internet, mas não consegui encontrar nenhuma referência a esse fat

Mais do que culpar o compilador x meu código, fiquei pensando qual seria o motivo para o programa ser executado no Windows e travar no Linux. As respostas re: diferentes gerenciadores de memória e layout de pilha / pilha no Windows / Linux estavam ilustrando a esse respeit

A conclusão de que o GCC da cygwin é tão 'boa' quanto o GNU / Linux 'e é a sorte dos sistemas operacionais subjacentes / pura sorte que o meu programa de buggy é executado sob um e não o outro está praticamente correto?

Quanto à publicação do código-fonte, é uma tarefa de casa, então eu preferiria encontrar o problema, se possível:)

Edit 2

Aceitei a resposta do jalf, que fala sobre o que faz o programa rodar no Windows e não no Linux, que era o que eu realmente queria saber. Obrigado a todos que contribuíram, todas foram respostas muito interessantes e informativas.

Quando eu encontrar o problema e o corrigir, vou fazer upload de um arquivo zip com todo o código fonte desta versão não funcional, caso alguém esteja curioso para ver o que diabos eu fiz:)

Edit 3

Para aqueles interessados em ver o código, encontrei o problema, e isso ocorreu devido a indicadores. Eu estava tentando retornar um ponteiro de uma função. O ponteiro que eu estava tentando retornar estava sendo declarado dentro da função e, portanto, estava sendo destruído quando a função foi executada. O código problemático é comentado nas linhas 22 a 2

Sinta-se livre para ridicularizar meu códig

/**
*  Returns array of valid searches based on current coordinate
*/
void determine_searches(int row, int col, int last_row, int last_col, int *active_search){
    // define coordinate categories and related valid search directions
    int Library0[] = {2, 3, 4, -1};
    int Library1[] = {4, 5, 6, -1};
    int Library2[] = {2, 3, 4, 5, 6, -1};
    int Library3[] = {0, 1, 2, 3, 4, 5, 6, 7, -1};
    int Library4[] = {0, 1, 2, -1};
    int Library5[] = {0, 6, 7, -1};
    int Library6[] = {0, 1, 2, 6, 7, -1};
    int Library7[] = {0, 1, 2, 3, 4, -1};
    int Library8[] = {0, 4, 5, 6, 7, -1};

    int * Library[] = { 
        Library0, Library1, Library2,
        Library3, Library4, Library5,
        Library6, Library7, Library8,
    };

    // declare (and assign memory to) the array of valid search directions that will be returned
    //int *active_search;
    //active_search = (int *) malloc(SEARCH_DIRECTIONS * sizeof(int));


    // determine which is the correct array of search directions based on the current coordinate
    // top left corner
        int i = 0;
    if(row == 0 && col == 0){
        while(Library[0][i] != -1){
            active_search[i] = Library[0][i];
            i++;
        }
    }
    // top right corner
    else if(row == 0 && col == last_col){
        while(Library[1][i] != -1){
            active_search[i] = Library[1][i];
            i++;
        }
    }
    // non-edge columns of first row
    else if(row == 0 && (col != 0 || col != last_col)){
        while(Library[2][i] != -1){
            active_search[i] = Library[2][i];
            i++;
        }
    }
    // non-edge coordinates (no edge columns nor rows)
    else if(row != 0 && row != last_row && col != 0 && col != last_col){
        while(Library[3][i] != -1){
            active_search[i] = Library[3][i];
            i++;
        }
    }
    // bottom left corner
    else if(row == last_row && col == 0){
        while(Library[4][i] != -1){
            active_search[i] = Library[4][i];
            i++;
        }
    }
    // bottom right corner
    else if(row == last_row && col == last_col){
        while(Library[5][i] != -1){
            active_search[i] = Library[5][i];
            i++;
        }
    }
    // non-edge columns of last row
    else if(row == last_row && (col != 0 || col != last_col)){
        while(Library[6][i] != -1){
            active_search[i] = Library[6][i];
            i++;
        }
    }
    // non-edge rows of first column
    else if((row != 0 || row != last_row) && col == 0){
        while(Library[7][i] != -1){
            active_search[i] = Library[7][i];
            i++;
        }
    }
    // non-edge rows of last column
    else if((row != 0 || row != last_row) && col == last_col){
        while(Library[8][i] != -1){
            active_search[i] = Library[8][i];
            i++;
        }
    }
    active_search[i] = -1;
}

questionAnswers(11)

yourAnswerToTheQuestion