ValedasFloresRetail.exe中0x775615de处的未处理异常:0xC0000005:访问冲突写入位置0x00000000

时间:2013-06-10 00:15:26

标签: c pointers access-violation

  

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:错误:无法评估表达式

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

您正在迭代:

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

这样Armazem的每个单元都有一个大小,但不是Armazem本身。你应该首先看到这样的一行:

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

在代码的开头。

否则Armazem保持为NULL,如错误消息所示。