Ir ao conteúdo
  • Cadastre-se

Access violation at address 00407F26


luisfalm

Posts recomendados

Oi pessoal

Por acaso alguem tem uma dica para isso: estou com erro de "Access Violation" no seguinte código:

for(j=0; j<ny; j++){

y[j]= w[nz][j];

for(i=0; i<nz; i++) y[j] = y[j] + z*w[j];

}

Estranho que os valores da matriz w são constantes. Esse código está dentro de um loop que teria que executar 150 vezes. Entretanto, sempre na iteração 49 dá o erro de "Access Violation". Quando o fiz um debug do código o valor de w para essa iteração estava "???". Nas iterações anteriores estavam normal.

A varável w foi alocada da seguinte maneira:

w= new double *[nz+1];

for(i=0; i<(nz+1); i++) w= new double [ny];

Estou usando o Builder C++ 6.0. Por acaso é alguma configuração de ambiente que devo fazer?

Qualquer ajuda fico agradecido.

abraços

Fernando

Link para o comentário
Compartilhar em outros sites

Para facilitar, abaixo vai o código da rotina que está dando o erro. o Erro ocorre sempre na iteração k=49 na linha em destaque. abraços

float mlp1_teste(int nx, int nz, int ny){

FILE *fin;

AnsiString in;

double **x, *z, *y, **v, **w;

float lambda_z=0.001, lambda_y=0.001;

int s_real, s_esperada, i, j, k, acerto=0, ns, *se;

registro reg;

int ac[6]={0,0,0,0,0,0};

//********* aloca memoria para RNA

// abre arquivo de dadosm para teste da RNA

in= PATH + FEATURE + "teste.rna";

fin= fopen(in.c_str(),"rb");

fread(&ns,sizeof(int),1,fin);

// camada de entrada

x= new double *[ns];

for(i=0; i<ns; i++) x= new double [nx];

se= new int [ns];

for(i=0; i<ns; i++){

for(j=0; j<nx; j++) fread(&x[j],sizeof(double),1,fin);

fread(&se,sizeof(int),1,fin);

}//for i

fclose(fin); fin=NULL;

// camada oculta

z= new double [nz];

// camada de saída

y= new double [ny+1];

// peso entre x e z

v= new double *[nx+1];

for(i=0; i<(nx+1); i++) v= new double [nz];

// peso entre z e y

w= new double *[nz+1];

for(i=0; i<(nz+1); i++) w= new double [ny+1];

// abre arquivo de pesos

in= PATH + FEATURE + "pesos.rna";

if((fin= fopen(in.c_str(),"rb"))==NULL) return -1;

// peso entre x e z

for(i=0; i<(nx+1); i++)

for(j=0; j<nz; j++) fread(&v[j],sizeof(double),1,fin);

// peso entre z e y

for(i=0; i<(nz+1); i++)

for(j=0; j<ny; j++) fread(&w[j],sizeof(double),1,fin);

// fecha arquivo de pesos

fclose(fin); fin=NULL;

// teste da rede

for(k=0; k<ns; k++){

// saída da RNA

if(se[k]!=0) s_esperada=1;

else s_esperada=0;

// calcula entrada da camada oculta

for(j=0; j<nz; j++){

z[j]= v[nx][j];

for(i=0; i<nx; i++) z[j]= z[j] + x[k]*v[j];

}// for j

// calcula a saída da camada oculta

for(j=0; j<nz; j++) z[j]= 1./(1.+exp(-lambda_z*z[j]));

// calcula entrada da camada de saída

for(j=0; j<ny; j++){

y[j]= w[nz][j];

for(i=0; i<nz; i++) y[j] = y[j] + z*w[j];

}// for j

// calcula a saída da camada de saída

for(j=0; j<ny; j++) y[j]= 1./(1.+exp(-lambda_y*y[j]));

// saída real da RNA

for(j=0; j<ny; j++)

if(y[j]>0.5) s_real= 0;

else s_real= 1;

// verifica se acertou

if(s_real==s_esperada){

acerto++;

ac[k%ns]++;

}

}//for k

// libera memória

for(i=0; i<ns; i++){ delete[] x; x = NULL; }

delete[] x; x = NULL;

delete[] se; se = NULL;

delete[] z; z = NULL;

delete[] y; y = NULL;

for(i=0; i<(nx+1); i++){ delete[] v; v = NULL; }

delete[] v; v = NULL;

for(i=0; i<(nz+1); i++){ delete[] w; w = NULL; }

delete[] w; w = NULL;

return (float)(100*acerto)/ns;

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...