Où est l'erreur? - C++ - Programmation
Marsh Posté le 19-04-2004 à 12:04:33
après une lecture en 5 secondes, je dirais que c'est à cause de tes "<=" dans les for.
Si t'as une image de picwidth pixels de large, ça va de 0 à picwidth-1, donc il faut un "<" pour la comparaison.
Sinon ta déclaration « int (*tab)[800] = new int[400][800]; » me semble très étrange
j'aurais plutôt mis « int **tab = new int[400][800]; » (et ce 400 et 800 c'est quoi ?)
Marsh Posté le 19-04-2004 à 12:19:41
Ouais suis d'accord pour la déclaration de tab, mais si je déclare comme tu me le conseilles, voilà ce que je récupère :
"error C2440: 'initializing' : cannot convert from 'int (*)[800]' to 'int ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast"
Idéalement, je voudrais allouer de la mémoire pour un tableau de dim picwidth x picheight mais pour l'instant je reste avec des images de 400 x 800.
Sinon j'ai remplacé les <= par des <, c'est vrai que c'était foireux ca, mais aucun changement, tjs une erreur l'exécution.
Je pense que je vais travailler avec un tableau à 1 dim, genre :
[cpp]int* pix = new int [picwidth * picheight];
for (int i = 0; i <= picheight; i++)
{
for (int j = 0; j <= picwidth; j++)
{
if (pDC->GetPixel (j, i) == RGB (0, 0, 0))
pix [j + picwidth * i] = 1;
else
pix [j + picwidth * i] = 0;
}
}
Merci pour ta réponse en tous les cas.
Marsh Posté le 19-04-2004 à 12:23:30
ha ouais j'avais pas fait gaffe, en fait je ne sais pas trop comment on alloue en un coup des tableaux à plusieurs dimensions.
Le tableau à une dimension ça doit marcher, mais met quand même les "<" à la place des "<="
Marsh Posté le 19-04-2004 à 13:35:43
pour allouer un tableau a deux dimensions t'alloues d'abord un dimension, et ensuite tu fais une boucle pour alouer chaque case
genre ca :
Code :
|
y'a peut etre des erreurs de syntaxe, mais le principe est la
a+
Marsh Posté le 19-04-2004 à 13:37:17
Ou sinon...
Code :
|
Tu pourrais même optimiser ta boucle si GetPix ne prennait pas deux arguments, mais un seul comme pix[];
Cordialement,
xter.
Marsh Posté le 19-04-2004 à 13:39:16
ah ouais pas pense au vecteur, bien vu
Marsh Posté le 19-04-2004 à 23:25:48
antp a écrit : après une lecture en 5 secondes, je dirais que c'est à cause de tes "<=" dans les for. |
Ces limites sont d'autant plus bizarres que si picwidth >=800 ou picheight>=400, il y a toute chance qu'il y ait un dépassement de tableau à un moment donné (ou alors je n'ai vraiment rien compris).
Sinon, pour allouer un tableau à n dimensions, il faut nécessairement préciser n-1 dimensions, parce que sinon, le compilateur ne saura pas faire l'arithmétique de pointeur nécessaire pour se déplacer dans le tableau. Dans la majorité des cas, l'utilisation des vecteurs, ou éventuellement de classes matrices ad'hoc, est plus simple (d'autant qu'il y a une belle fuite mémoire à la fin).
Marsh Posté le 19-04-2004 à 11:54:44
Salut les gens,
Je me galère avec un message d'erreur qui apparaît suite à l'exécution de ce prog, un truc genre "Impossible d'écrire en mémoire". Je comprends pas trop d'où ca vient puisque j'alloue de l'espace mémoire, tout bien quoi. Enfin je trouve que c'est tout bien mais ptêt que y a une erreur qui vous saute aux yeux et pas à moi.
Le prog sert à identifier les pixels contenus dans une forme quelconque, de contour noir, et à les colorier en rouge.
Merci pour le coup de pouce .