簡體   English   中英

調用函數時,C程序崩潰。

[英]C program crashes when a function is called.

所以,我向用戶詢問novo-> prato(列表項),但是在函數調用中的某處或者之前的scanf中,程序崩潰了,我看不出代碼有什么問題。

這些是聲明和功能。

typedef struct pedido pedido, *ppedido;

struct ingrediente{
    char nome[15];
    int id;
    int qtd;
    int limite;
    int consumo_medio;
};

struct item{
    char id[5];
    int ing[10];
    float qtd[10];
};

struct pedido{
    char id[5];
    int prioridade;
    int mesa, n_pratos;
    struct prato *prato[TAM];
    ppedido prox;
};

struct prato{
    char id[5];
};

int verifica_prato(char prato[])
{
    FILE *f;
    struct item aux;

    int i=0, j=0;

    f = fopen("menu.bin", "rb");

    while((fread(&aux, sizeof(struct item), 1, f)) == 1){
        if((strcmp(prato, aux.id)) == 0)
        i++;
    }
    fclose(f);

    if(i == 0){
        printf("Prato nao existe no menu.\n");
        return 1;
    }

    if(i > 1)
        return 0;
    }

這是函數ia調用的地方。

for(i=0;i<novo->n_pratos;i++){
    do{
        printf("Introduza o ID do prato %d: ", i+1);
        scanf("%s", &novo->prato[i]);
        printf("%s", novo->prato[i]);
        k = verifica_prato(novo->prato[i]); //this function
        if(k == 0)
            w = verifica_ing(novo->prato[i]->id);
        }while(k != 0);
}

里面的verifica_prato()
在行f = fopen("menu.bin", "rb")你應該檢查文件是否成功打開。
使用if( f != NULL )

novo->n_pratos總是小於TAM 如果n_pratos超過TAM ,則可能存在邊界錯誤,因為已將TAM定義為數組大小。

verifca_prato的簽名不應該是int verifica_prato(struct prato),或者調用應該是verifica_prato(novo-> prato [i] - > id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM