0

この文字列をリスト内の 1 つの配列にコピーできず、その行に到達するとプログラムがクラッシュします。これを解決するのを手伝ってもらえますか? ありがとうございました。

これがコードです。

typedef struct pedido pedido, *ppedido;

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

struct prato{
    char id[5];
};


ppedido AdicionaPratoMenu(ppedido lista, char ped[],char idprato[])
{
    int i,j=0,m=0;

    while(lista != NULL){
        if((strcmp(lista->id, ped)) == 0)
        {
            for(i=0;i<lista->n_pratos;i++)
            {
                m++;
            }

            strcpy(lista->prato[m]->id,idprato);   //This is where it goes wrong

        }
        lista=lista->prox;
    }

    return lista;
}
4

4 に答える 4

1

次の場合、これは境界外アクセスの可能性がありますTAM == lista->n_pratos

strcpy(lista->prato[m]->id,idprato);

前のループは(C の配列インデックスは 0 から開始) でforのみ終了するためです。TAM == m修正するm < TAMには、 を呼び出す前に確認してstrcpy()ください。

于 2012-06-25T08:32:54.893 に答える
0

チェックする必要があります

  1. で、lista->prato[m]「m」は「TAM」より小さいpprato prato[TAM];
  2. の長さはidprato5 未満です (これは、定義したものです)。
于 2012-06-25T08:32:28.360 に答える
0

「pprato」は「struct prato」へのポインタであると想定しています。その場合、「struct prato」へのポインターの配列がありますが、実際にはそれらに割り当てられたメモリがなく、strcpy() でそれらを逆参照しようとしています。

于 2012-06-25T08:32:46.737 に答える