Problème de comparaison. - C - Programmation
Marsh Posté le 01-02-2007 à 14:20:13
Mince !
Marsh Posté le 01-02-2007 à 14:20:37
ce qui est important, c'est pas la valeur (255 ou 0) à laquelle tu compares le résultat, mais plutôt les valeurs de i et j. Il faut t'assurer que i et j ne dépassent pas les tailles max allouées pour les données de ton image (variable 'source', je suppose).
Je ne peux pas t'en dire plus sans avoir un peu de contexte. En particulier, d'où viennent i et j, et surtout comment a été alloué 'source' (et accessoirement, le code de getPixel serait peut-être utile)
Marsh Posté le 01-02-2007 à 14:23:29
Les variable i et j sont peut-être hors des limites du bitmap, ce qui peut arriver sur l'on inverse la colonne avec la ligne, ou si l'on croit que le bitmap courvre tous l'écran au lieu de ne couvrir qu'une portion de l'écran
Marsh Posté le 01-02-2007 à 14:28:44
En fait j'ai créé ces deux fonctions aux codes quasi-identiques (mis à part la fameuse comparaison),
la preuve en code (désolé pour la longueur) :
Code :
|
Sur la même image, la fonction dilatation marche, et érosion crashe.
Je suis sûr à 100% que l'erreur ne vient pas des fonctions appelées (DessineImageGris & Cie),
Donc je ne pense pas non plus que l'erreur vienne des variables i et j passant hors limite.
D'autres idées ? :]
PS : Au cas où, le code de getpixel :
Code :
|
Marsh Posté le 01-02-2007 à 14:37:55
Code :
|
Je pense qu'il faut plutôt mettre
Code :
|
Comme ça les indices que tu utilises dans tes traitements (i-1,i+1,j-1,j+1) restent toujours dans les limites allouées : [0;dimX] et [0;dimY]
Marsh Posté le 01-02-2007 à 14:40:01
A priori rien à voir avec ton bug, mais après les malloc() (dont le cast est inutile d'ailleurs), tu devrais vérifier que l'allocation s'est bien effectuée.
Pour le cas où, histoire de ne pas taper dans un res->buffer qui contiendrait NULL.
Marsh Posté le 01-02-2007 à 14:43:03
Aw yeah, la solution de francesco marche :]
Comme quoi les erreurs ne sont pas tout le temps là où on les attend.
Erreur toute nulle en plus ^^
Merci beaucoup à tous (et spécialement à francesco).
Marsh Posté le 01-02-2007 à 14:47:20
Evil_Ifrit a écrit : Aw yeah, ça marche :] |
Les erreurs ne sont jamais où on les attend
C'est pas une erreur si nulle que ça : c'est sûrement le type d'erreur le plus rencontré en C. Tu peux aussi apprendre à utiliser un debugger, ce qui te permettrait de localiser beaucoup plus rapidement et précisément l'origine des problèmes.
Marsh Posté le 10-02-2007 à 13:22:34
Evil_Ifrit a écrit : En fait j'ai créé ces deux fonctions aux codes quasi-identiques (mis à part la fameuse comparaison),
|
T'as rien dilaté du tout...
Code :
|
ou un truc comme ça...
Le tableau est donc trop petit. Comportement indéfini.
Toujours vérifier ses indices. assert() peut aider...
Marsh Posté le 27-05-2007 à 18:55:23
Emmanuel Delahaye a écrit : T'as rien dilaté du tout...
|
Je tenais à garder la taille de l'image de base,
la dilatation ne devait s'appliquer que sur les formes contenues dans l'image.
De plus, je n'applique pas l'algorithme de dilatation sur les pixels situés 'au bord' de l'image.
La tableau n'est donc pas trop petit, et le comportement défini.
Cordialement.
Marsh Posté le 01-02-2007 à 14:14:45
Bien le bonjour.
Je suis en train de dévelloper une petite application de traitement d'image,
dans laquelle j'ai écrit cette ligne de code, qui crashe à l'éxécution
(le programme compile sans aucune erreur ni warning) :
Ce que je ne comprend pas, c'est que plus haut dans le code,
j'ai cette ligne qui fonctionne parfaitement:
J'ai aussi testé une comparaison avec 254 et 256, bilan : ligne fonctionnelle.
PS : La fonction getpixel renvoie un unsigned char.
Quelqu'un a une explication ? Merci d'avance.
Message édité par Evil_Ifrit le 01-02-2007 à 14:16:53
---------------
Soon.