【问题标题】:my program fail to run [closed]我的程序无法运行[关闭]
【发布时间】:2013-12-16 16:39:28
【问题描述】:

我有一个用 C 语言编写的小程序,尽管编译器没有发出警告(带有 cygwin 的 netbeans),但它在控制台中没有给我任何提示就无法运行。我的编译器没有按预期工作吗?代码有什么问题?

这里是代码。该程序基本上是多次创建和排序一些数组,以比较不同的排序方法。

#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);
}

【问题讨论】:

  • 是什么让您认为程序无法运行?它只是不打印任何东西?你能用 Netbeans 在调试模式下运行它吗?
  • Aaaa 调试器说了什么?
  • 这不是一个小程序。至少不是在“这里出了点问题,可能是什么?”的上下文中。

标签: c compiler-errors


【解决方案1】:

我的猜测是堆栈溢出。是的,真的。

假设一个 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 MB。这可能超出操作系统认为您应该使用的范围。

考虑尝试使用malloc() 在堆上分配它们,或者检查您的平台上应用了哪些限制。

【讨论】:

  • 哇!这就是我能说的......
  • @BitFiddlingCodeMonkey 好的……你是什么意思?我是不是做错了什么?
  • 没有。只是对阵列的大小感到震惊。很抱歉造成混乱。
  • 当然,进程停止并引发了一些错误消息?不要告诉我它以返回码 0 退出?
猜你喜欢
  • 2022-09-28
  • 2020-12-22
  • 2017-02-08
  • 2012-11-12
  • 2013-03-15
  • 2017-03-13
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多