1

ValedasFloresRetail.exe の 0x775615de で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x00000000。

このエラーが発生していますが、何が起こっているのかわかりません

pProduto **iniciaDados(int *corredores, int *armarios){

pProduto **Armazem=NULL;
FILE *f;
int i,j,k;
int id,quantidade;
int numProdutos;
pProduto novo;

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

if(f==NULL){
    printf("Erro na leitura\n");
    return NULL;
}

fread(corredores,sizeof(int),1,f);
fread(armarios,sizeof(int),1,f);

novo=(pProduto)malloc(sizeof(produto));

for(i=0;i<*corredores;i++){
    Armazem[i]=(pProduto *)malloc(sizeof(pProduto)*(*armarios));
}

for(i=0;i<*corredores;i++)
    for(j=0;j<*armarios;j++){
        Armazem[i][j]=NULL;
    }

for(i=0;i<*corredores;i++){
    for(j=0;j<*armarios;j++){
        fread(&numProdutos,sizeof(int),1,f);
        for(k=0;k<numProdutos;k++){
            fread(&id,sizeof(int),1,f);
            fread(&quantidade,sizeof(int),1,f);
            Armazem[i][j]=adicionaProduto(Armazem[i][j],id,quantidade);

        }
    }
}

return Armazem;
}

コール スタックに移動すると、エラーがここにあると表示され、次のpProduto **Armazem=NULL;ように表示されます。

CXX0030: エラー: 式を評価できません

これを解決するにはどうすればよいですか?

4

1 に答える 1

2

あなたは繰り返しています:

for(i=0;i<*corredores;i++){
    Armazem[i]=(pProduto *)malloc(sizeof(pProduto)*(*armarios));
}

の各セルにArmazemはサイズがありますが、Armazem 自体にはありません。最初に次のような行が必要です。

Armazem = (pProduto **)malloc((*corredores)*sizeof(pProduto*));

コードの先頭に。

それ以外の場合Armazemは、エラー メッセージに示されているように NULL のままです。

于 2013-06-10T00:44:27.937 に答える