函数指针调试错误

时间:2016-12-18 15:15:41

标签: c function pointers function-pointers

当我在Visual Studio中使用Ctrl + F5运行我的代码时出现此错误:

Debug Error !
Program: name of my program bla bla

Run-Time Check Failure#2-S

我的代码

// fig07_26.cpp : definisce il punto di ingresso dell'applicazione console.
// Programma di ordinamente multifunzione che fa uso dei puntatori a funzioni

#include <stdio.h>
#define SIZE 10

//Prototipi di funzione

void bubble(int work[], const int size, int(*compare) (int a, int b));
int ascending(int a, int b);
int descending(int a, int b);


int main()
{

    int order; // 1 per ordinamento ascendente 2 per quello discendente
    int counter; // contatore

    // inizializza il vettore a

    int a[SIZE] = { 2,5,3,6,1,5,8,0,6,1 };

    printf("Enter 1 to sort ascending order\n" "Enter 2 to sort descending order: \n");
        scanf_s("%d", &order);

        printf("\nData items printed in original order");

        for (counter = 1; counter < SIZE; counter++) {
            printf("%5d", a[counter]);
        }

        // Ordina il vettore in ordine ascendente; passa la funzione ascending
        // come argomento per specificare l'ordinamento ascendente

        if (order == 1) {
            bubble(a, SIZE, ascending);
            printf("\nData items in ascending order");
        }

        else
        {
            bubble(a, SIZE, descending);
            printf("\nData items in descending order");
        }

        // visualizza il vettore ordinato

        for (counter = 0; counter < SIZE; counter++) {
            printf("%5d", a[counter]);
        }

        printf("\n");

    return 0;
}

/** Bubble sort multifunzione: Il parametro compare è un puntatore a una funzione di comparazione che determina il senso
dell'ordinamento **/

void bubble(int work[], const int size, int (*compare) (int a, int b)) {

    int pass; //contatore dei passaggi
    int count; //contatore dei confronti

    void swap(int *element1Ptr, int *element2Ptr); // prototipo

    // ciclo per controllare i passaggi

    for (pass = 1; pass < size; pass++) {

        // ciclo per controllare i confronti

        for (count = 0; count < size; count++)
        {
            // Scambia gli elementi adicenti se non sono in ordine

            if ( (*compare) (work[count], work[count + 1]) ) {
                swap(&work[count], &work[count + 1]);
            }
        }
    }
}

// Scambia i valori nelle locazioni di memoria puntate da element1Ptr e element2Ptr

void swap(int *element1Ptr, int *element2Ptr) {

    int hold; // variabile temporanea

    hold = *element1Ptr;
    *element1Ptr = *element2Ptr;
    *element2Ptr = hold;
}


// Determina se gli elementi non sono in ordine rispetto a un ordinamento ascendente

int ascending(int a, int b) {
    return b < a; // effettua uno scambio se b è minore di a
}

// Determina se gli elementi sono in ordine rispetto a un ordinamento discendente

int descending(int a, int b) {
    return b > a;
}

0 个答案:

没有答案