0xC0000005:访问冲突读取位置0x00000008。 C代码

时间:2014-06-04 03:19:20

标签: c

我目前正在为一个大学工作制作一个项目,在这样做时我遇到了这个错误,我不知道是什么导致它。

它指向的行是:if ((*compara)(ptr->dados, valor))

功能:

void * pesquisar(PNO cabeca, int (*compara)(), void* valor) {

    PNO ptr;
    for (ptr = cabeca; ptr; ptr = ptr->prox);
    if ((*compara)(ptr->dados, valor))
        return ptr->dados;
        return NULL;

}

结构

    struct no{
    struct no*prox;
    struct no*ant;
    void *dados;
};

    typedef struct no NO;
    typedef NO*PNO;
    typedef NO**PPNO;

    struct cliente{
        int ID_cliente;
        char nome[60];
        char morada[255];
        int contribuinte;
        struct cliente * prox;
    };
    typedef struct cliente CLIENTE;
    typedef CLIENTE*PCLIENTE;
    CLIENTE *cabCliente, *cauCliente;

主要:

PNO Cliente = NULL, Fatura = NULL;
    PCLIENTE pesquisa;

    char n;
    void * Dados;
    int opcao;
    char nome[60];

case 3:
                printf("Insira o Nome: ");
                fgets(nome, 60, stdin);
                nome[strlen(nome) - 1] = '\0';
                pesquisa = pesquisar(Cliente, cmpNomeCliente, nome);
                if (pesquisa) printf("Nome é: %s", nome);
                else printf("Aluno inexistente");
                getch();
                break;

1 个答案:

答案 0 :(得分:1)

for (ptr = cabeca; ptr; ptr = ptr->prox);
if ((*compara)(ptr->dados, valor))

在这段代码中,第二行中的ptr将始终为NULL,因为for循环一直运行,直到ptr表达式为false且由于;for之后,循环没有正文。