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 回答