Erreur de programmation en C Aidez moi svp
adel90
-
jenaimarre2fr -
jenaimarre2fr -
Bonjour,
Bonjour,
Je n'arrive pas à trouver l'erreur d'execution segmentation fault sur la derniere partie
remplissage de bufferRes
C'est surement un eureur de pointeur que je ne maitrise pas bien
merci de m'aider
int main()
{
unsigned char ** bufferBases;
unsigned char * bufferRef;
unsigned char * bufferRes;
int * bufferIntensite;
int * bufferIntensiteBases;
int larg,haut;
int i,j;
//w nombre de colonnes
//h nombre de lignes
//n nombre des images dans la base
//bufferBases contient les images de la base
//bufferRef contient l'image de réference
//bufferRes contient l'image resultat
n = init("../Images/Base",&bufferBases);
//chargement de l'image dans le tableau bufferRef
chargeImageReference("../Images/In/nao.png",&bufferRef,&w,&h);
larg=8*w;
haut=8*h;
//initialisation de w et h
//taille de bufferRef est w*h
//Initialisation de l'image finale
initialiseImageFinale(&bufferRes,larg,haut);
//calcul de l'intensite de l'image de reference
intensite(&bufferIntensite,bufferRef,w,h);
intensite_base(&bufferIntensiteBases,bufferBases);
//remplissage de bufferRes
int k,indice,taille,nbint;
taille=larg*haut;
nbint=(w*h)/(c*c);
for(i=0;i<nbint;i++)
{
for(j=i/(w/c)*4;j<32;j++)
for(k=4*i%(w/c);k<32;k++)
{
indice=compare_blocs(bufferIntensite,bufferBases,bufferIntensiteBases);
//printf("%d ",indice);
bufferIntensite+=i;
//bufferRes=bufferBases[indice];
//bufferBases+=j*32+k;
//bufferRes+=j*larg+k;
}
}
Bonjour,
Je n'arrive pas à trouver l'erreur d'execution segmentation fault sur la derniere partie
remplissage de bufferRes
C'est surement un eureur de pointeur que je ne maitrise pas bien
merci de m'aider
int main()
{
unsigned char ** bufferBases;
unsigned char * bufferRef;
unsigned char * bufferRes;
int * bufferIntensite;
int * bufferIntensiteBases;
int larg,haut;
int i,j;
//w nombre de colonnes
//h nombre de lignes
//n nombre des images dans la base
//bufferBases contient les images de la base
//bufferRef contient l'image de réference
//bufferRes contient l'image resultat
n = init("../Images/Base",&bufferBases);
//chargement de l'image dans le tableau bufferRef
chargeImageReference("../Images/In/nao.png",&bufferRef,&w,&h);
larg=8*w;
haut=8*h;
//initialisation de w et h
//taille de bufferRef est w*h
//Initialisation de l'image finale
initialiseImageFinale(&bufferRes,larg,haut);
//calcul de l'intensite de l'image de reference
intensite(&bufferIntensite,bufferRef,w,h);
intensite_base(&bufferIntensiteBases,bufferBases);
//remplissage de bufferRes
int k,indice,taille,nbint;
taille=larg*haut;
nbint=(w*h)/(c*c);
for(i=0;i<nbint;i++)
{
for(j=i/(w/c)*4;j<32;j++)
for(k=4*i%(w/c);k<32;k++)
{
indice=compare_blocs(bufferIntensite,bufferBases,bufferIntensiteBases);
//printf("%d ",indice);
bufferIntensite+=i;
//bufferRes=bufferBases[indice];
//bufferBases+=j*32+k;
//bufferRes+=j*larg+k;
}
}
A voir également:
- Erreur de programmation en C Aidez moi svp
- Application de programmation - Guide
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
1 réponse
salut
ton bufferRes tu l'as declaré comme pointeur sur caracteres (8 bits)
en regle generale, un pointeur "pt" ne peut pas etre affecté par une valeur s'il n'est pas précedé per une étoile (*pt):
char x=10;
pt=x; //ecriture fausse
*pt=x; // a l'interieur de l'adresse memoire pt, c'est a dire *pt, on trouve la val de x (=10)
cette regle s'applique a tous les pointeur que t'utilises dans ton programme, quand t'ecris
bufferRes=bufferBases[indice]; c'est faux
deja si j'ai bien compris, bufferRes est un buffer comme l'indique bien son nom, donc amener a contenir plusieur valeurs......
solution:
*(bufferRes+i)=bufferBases[indice]; //ceci est equivalent a bufferRes[i]=bufferBases[indice]; si bufferRes etait declaré comme un tableau de caractere
ceci est valable pour tous tes pointeurs
ton bufferRes tu l'as declaré comme pointeur sur caracteres (8 bits)
en regle generale, un pointeur "pt" ne peut pas etre affecté par une valeur s'il n'est pas précedé per une étoile (*pt):
char x=10;
pt=x; //ecriture fausse
*pt=x; // a l'interieur de l'adresse memoire pt, c'est a dire *pt, on trouve la val de x (=10)
cette regle s'applique a tous les pointeur que t'utilises dans ton programme, quand t'ecris
bufferRes=bufferBases[indice]; c'est faux
deja si j'ai bien compris, bufferRes est un buffer comme l'indique bien son nom, donc amener a contenir plusieur valeurs......
solution:
*(bufferRes+i)=bufferBases[indice]; //ceci est equivalent a bufferRes[i]=bufferBases[indice]; si bufferRes etait declaré comme un tableau de caractere
ceci est valable pour tous tes pointeurs