2013-12-16 3 views
-4

У меня есть небольшая программа на C, и, несмотря на отсутствие предупреждений от компилятора (netbeans with cygwin), она просто не работает, не давая мне никаких подсказок в консоли. Мой компилятор не работает так, как предполагается? Что может быть неправильным в коде?моя программа не запускается

Вот код. Программа в основном создает и сортирует несколько массивов много раз, чтобы сравнить различные методы сортировки.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

/* 
* 
*/ 
//void preenchendo (int, int); 
//void bubblesort (int, int, int *, int *); 
//void selectsort (int, int, int *, int *); 
//void insertsort (int, int, int *, int *); 

void preenchendo (int n, int vetor[n]) { 

    srand((unsigned)time(NULL)); 
    int contador; 

    for(contador = 0; contador < n; contador++) { 
     vetor[contador] = rand() % n; 
    } 
} 

void bubblesort (int vetor[], int n, int * troca, int * comp) { 

    *troca = 0; 
    *comp = 0; 

    int foi = 0; 
    int end = n; 
    int contador; 

    do{ 
     for(contador = 0; contador < end; contador++) { 
      if(vetor[contador] > vetor[contador+1]){ 
       int aux = vetor[contador]; 
       vetor[contador] = vetor[contador+1]; 
       vetor[contador+1] = aux; 
       foi=1; 
       *troca++; 
      } 
      *comp++; 
     } 
     end--; 
    }while(troca == 0); 
} 

void selectsort (int vetor[], int n, int * troca, int * comp) { 

    *troca = 0; 
    *comp = 0; 
    int min; 
    int contador, contador2; 

    for(contador = 0; contador < n-1; contador++) { 
     min = contador; 
     for(contador2 = contador+1; contador2 < n; contador2++) { 
      if(vetor[contador2] < vetor[min]) { 
       min = contador2; 
      } 
      *comp++; 
     } 
     if(min != contador) { 
      int aux = vetor[contador]; 
      vetor[contador] = vetor[min]; 
      vetor[min] = aux; 
      *troca++; 
     } 
     *comp++; 
    } 
} 

void insertsort (int vetor[], int n, int * troca, int * comp) { 

    *troca = 0; 
    *comp = 0; 
    int aux; 
    int contador; 

    for(contador = 1; contador < n; contador++) { 
     int element = vetor[contador]; 
     int pos = contador-1; 

     while(pos >= 0 && element < vetor[pos]) { 
      vetor[pos+1] = vetor[pos]; 
      pos--; 
      *comp++; 
      *troca++; 
     } 
     vetor[pos+1] = element; 
    } 
} 

void main(int argc, char** argv) { 
{ 
    int vetor1[1000], vetor2[10000], vetor3[50000], vetor4[500000]; //vetores originais 
    int vet1[1000], vet2[10000], vet3[50000], vet4[500000]; //ordenados 
    int veti1[1000], veti2[10000], veti3[50000], veti4[500000]; //ordenados inversamente 
    int troca, comp, contador, contador2; 

    preenchendo(1000, vetor1); 
    preenchendo(10000, vetor2); 
    preenchendo(50000, vetor3); 
    preenchendo(500000, vetor4); 
    for(contador = 0; contador < 1000; contador++) { 
     vet1[contador] = vetor1[contador]; 
    } 
    for(contador = 0; contador < 10000; contador++) { 
     vet2[contador] = vetor2[contador]; 
    } 
    for(contador = 0; contador < 50000; contador++) { 
     vet3[contador] = vetor3[contador]; 
    } 
    for(contador = 0; contador < 500000; contador++) { 
     vet4[contador] = vetor4[contador]; 
    } 

    //////////////////////////////////////////////////////////////////////////// 
    clock_t inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet1, 1000, &troca, &comp); 
    clock_t fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 


    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 
    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(vet4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 


    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet1, 1000, &troca, &comp); 
    printf("Select ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet2, 10000, &troca, &comp); 
    printf("Select ordenado 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet3, 50000, &troca, &comp); 
    printf("Select ordenado 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(vet4, 500000, &troca, &comp); 
    printf("Select ordenado 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 
    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet1, 1000, &troca, &comp); 
    printf("Insert ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet2, 10000, &troca, &comp); 
    printf("Insert ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet3, 50000, &troca, &comp); 
    printf("Insert ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(vet4, 500000, &troca, &comp); 
    printf("Insert ordenado 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    contador2 = 999; 
    for(contador = 0; contador < 1000; contador++) { 
     veti1[contador] = vet1[contador2]; 
     contador2--; 
    } 
    contador2 = 9999; 
    for(contador = 0; contador < 10000; contador++) { 
     veti2[contador] = vet2[contador2]; 
     contador2--; 
    } 
    contador2 = 49999; 
    for(contador = 0; contador < 50000; contador++) { 
     veti3[contador] = vet3[contador2]; 
     contador2--; 
    } 
    contador2 = 499999; 
    for(contador = 0; contador < 500000; contador++) { 
     veti4[contador] = vet4[contador2]; 
     contador2--; 
    } 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(veti1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado inv 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(veti2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado inv 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(veti3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado inv 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    bubblesort(veti4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Bubble ordenado inv 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 


    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(veti1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select ordenado inv 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(veti2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select ordenado inv 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(veti3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select ordenado inv 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    selectsort(veti4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Select ordenado inv 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 
    //////////////////////////////////////////////////////////////////////////// 
    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(veti1, 1000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert ordenado inv 1000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(veti2, 10000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert ordenado inv 10000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(veti3, 50000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert ordenado inv 50000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    inicio = clock()/(CLOCKS_PER_SEC/1000); 
    insertsort(veti4, 500000, &troca, &comp); 
    fim = clock()/(CLOCKS_PER_SEC/1000); 
    printf("Insert ordenado inv 500000\n"); 
    printf("Elapsed time: %d\n", (fim-inicio)); 
    printf("Trocas: %d\n", troca); 
    printf("Comparacoes: %d\n\n", comp); 

    system("pause"); 
    //return (0); 
} 
+2

Что заставляет вас думать, что программа не запускается? Он ничего не печатает? Можете ли вы запустить его в режиме отладки с помощью Netbeans? – Eregrith

+1

Aaaaand отладчик сказал что? –

+4

Это не маленькая программа. По крайней мере, не в контексте «здесь что-то не так, что это может быть?». – unwind

ответ

3

Мое предположение было бы переполнением стека. Да, действительно.

Предполагая, что 32-разрядное целое число, это:

int vetor1[1000], vetor2[10000], vetor3[50000], vetor4[500000]; //vetores originais 
int vet1[1000], vet2[10000], vet3[50000], vet4[500000]; //ordenados 
int veti1[1000], veti2[10000], veti3[50000], veti4[500000]; //ordenados inversamente 

в конечном итоге, используя около 6732000 байт, или около 6,4 Мбайт. Это может быть больше, чем операционная система думает, что вы должны использовать.

Подумайте о том, чтобы попытаться выделить их на кучу, используя malloc() или проверить, какие ограничения применяются на вашей платформе.

+0

Ничего себе! Это все, что я могу сказать ... –

+0

@BitFiddlingCodeMonkey Хорошо ... так что вы имеете в виду? Я сделал какую-то ошибку? – unwind

+0

№ Просто потрясен размером с массивом. Извините за путаницу. –

Смежные вопросы