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:错误:无法评估表达式
我该怎么做才能解决这个问题?
答案 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,如错误消息所示。