1
Good morning, I have a project to do, it is almost done, but now I have created two functions that give me reading access violation error, and I am not able to solve the problem, someone can help?
this is one of the functions that gives this error:
void imag_com_mais_blobs(BLOBS *b)
{
IMAGEM *im;
im = (IMAGEM *)malloc(sizeof(IMAGEM));
int max_blobs;
char im_mais_blobs[30];
max_blobs = 0;
//determinar imagem com mais blobs
if (b->npixeis>max_blobs)
{
max_blobs = b->npixeis;
strcpy(im_mais_blobs, im->nome_imagem);
printf("A imagem com mais blobs é %s", im_mais_blobs);
}
}
this function is called in another function, but I believe that there it is all right:
int LerFicheiro(char *fi, LISTAIMG *LImag,int R,int G,int B,int d) // fi é variável para o nome do ficheiro
{
int i, j, nC, nL, ncanais;
FILE *f;
PIXEL *p;
PIXEL **m;
IMAGEM *Imag;
BLOBS *b;
b = (BLOBS *)malloc(sizeof(BLOBS));
//Imag = (IMAGEM *)malloc(sizeof(IMAGEM));
p = (PIXEL *)malloc(sizeof(PIXEL));
f = fopen(fi, "r"); // abre um ficheiro qualquer
if (f == NULL) return NULL;
while (!feof(f))
{
system("cls");
printf("A analisar imagem\n");
//fread(&nome, sizeof(IMAGEM), 1, f); // nome da imagem
//fread(&Imag->NLINHAS, sizeof(IMAGEM), 1, f); // nº linhas
//fread(&Imag->NCOLUNAS, sizeof(IMAGEM), 1, f); // nº colunas
//fread(&Imag->NCANAIS, sizeof(IMAGEM), 1, f); // nº canais
Imag = criar_imagem();
fscanf(f,"%s", &Imag->nome_imagem);
if (feof(f))
{
free(Imag);
break;
}
fscanf(f, "%d", &Imag->NLINHAS);
fscanf(f, "%d", &Imag->NCOLUNAS);
fscanf(f, "%d", &Imag->NCANAIS);
if (Imag->NCANAIS != 3) // caso o nº de canais que conste no ficheiro seja diferente de 3, fecha o ficheiro.
{
fclose(f);
printf(" número de canais incorreto!!!");
return NULL;
}
Imag->pixels= criarmatriz(Imag->NLINHAS, Imag->NCOLUNAS);
for (i = 0; i < Imag->NLINHAS; i++)
{
for (j = 0; j < Imag->NCOLUNAS; j++)
{
fscanf(f, "%d", &Imag->pixels[i][j].R);
fscanf(f, "%d", &Imag->pixels[i][j].G);
fscanf(f, "%d", &Imag->pixels[i][j].B);
//fread(&m[i][j].R, sizeof(IMAGEM), 1, f);
//fread(&m[i][j].G, sizeof(IMAGEM), 1, f);
//fread(&m[i][j].B, sizeof(IMAGEM), 1, f);
Imag->pixels[i][j].visitado = 0;
}
}
imag_com_mais_blobs(b);
}
fclose(f);
return INSUCESSO;
}
structure BLOBS:
typedef struct blobs //pilha
{
int linha, coluna;
struct elementozona *inicio;
struct blobs *proximo;
float mediaR, mediaG, mediaB, desv_padraoR, desv_padraoG, desv_padraoB;
int npixeis;
}*ptBLOBS, BLOBS;
Keeps making the same mistake, same place :/
– IanMoone
update your question with the correction you made
– zentrunix
Now that I’m noticing, I put the code you sent me, but it’s just like the one I had before :)
– IanMoone