Accueil > Forum > > > > Taille de tableau ?
Taille de tableau ?
lundi 14 mars 2005 à 14:27:29 |
Taille de tableau ?

Praxe
|
Bonjour à tous
Je suis sur un projet vc++ v6 dans lequel je manipule des images. J'ai
fait un petit algo qui permet de récupérer des coordonnées de pixels
intéressants d'une image et de les stocker dans un int*. J'ajoute les 2
coordonnées grace à une fonction Add_pix() qui réalloue dynamiquement
la mémoire (realloc). Ca marche très bien jusqu'à une certaine taille
de mon tableau. Genre vers 6000 pixels (soit 12000 coordonnées) il met
l'erreur "Unhandled exception in X.exe : acces violation" en mode
debug. Bon ca fait 12000*2 = 24 ko, ca me semble po insurmontable
mais peut etre que je me trompe (surement même vu que ca ne marche pas
!) L'erreur vient quand je remplie mon tableau, juste après avoir
réalloué la mémoire. (J'ai essayé avec un POINT * et c'est exactement
le même problème).
Alors je voulais savoir est ce que c'est un problème de limite de la taille mémoire ou comment faire autrement ??
Merci d'avance
|
|
lundi 14 mars 2005 à 14:58:01 |
Re : Taille de tableau ?

ymca2003
|
Met un peu de code ça aidera à cerner le problème en particulier la fonction qui alloue et realloue et celle qui remplie. Il n'y a pas de limitation de mémoire à ce niveau (tu peux allouer plusieurs Mo sans problème).
|
|
lundi 14 mars 2005 à 15:12:51 |
Re : Taille de tableau ?

Praxe
|
Note : nb_elt est le nombre de pixel de l'objet courant et p la liste de coordonnées appartenant à l'objet courant
void CObjet::Add_pixel(int *point)
{
p = (int *)realloc(p, (nb_elt*2+2)*sizeof(int));
*(p+(nb_elt*2)) = *(point+0);
*(p+(nb_elt*2)+1) = *(point+1);
nb_elt++;
}
Ca parait peut etre con de s'embeter avec un int* et un tableau de
coordonnées de point mais c'est la seule solution que j'ai trouvé ... :(
|
|
lundi 14 mars 2005 à 15:41:16 |
Re : Taille de tableau ?

ymca2003
|
Cette fonction me parrait bonne mais pourrait être plus lisible : void CObjet::Add_pixel(int *point) { p = (int *)realloc(p, (nb_elt*2+2)*sizeof(int)); p[nb_elt*2] = point[0]; p[nb_elt*2+1] = point[1]; nb_elt++; }
Le plantage provient peut-être d'un écrasement mémoire (un pointeur mal utilisé ou un tableau où tu écrit hors de ses limites) qui corrompt le pointeur p.
Il serait peut être plus judicieux (si possible) d'allouer le tableau en une seule fois.
|
|
lundi 14 mars 2005 à 16:03:12 |
Re : Taille de tableau ?

Praxe
|
Merci de ta réponse. C'est vrai que c'est un peu lourd ma notation et je vais vite changer ça.
Le problème c'est que je ne connais pas la taille totale (elle augmente au fur et a mesure du parcours de l'image).
C'est chaud à trouver ça un écrasement mémoire, parcequ'il me met aucune erreur ou warning. Ya un moyen pour détecter ça ?
|
|
lundi 14 mars 2005 à 16:17:45 |
Re : Taille de tableau ?

ymca2003
|
pas vraiment à moins de faire du pas à pas sur ton prog et vérifier l'adresse mémoire pointée par p. Une solution est également de faires des tests systématiques sur les indices de tableaux.
|
|
lundi 14 mars 2005 à 18:19:40 |
Re : Taille de tableau ?

Praxe
|
Euh ... je viens de voir compte que je remplie toujours le meme CObjet
qui est, de surcroit en variable globale. Ca, Je suis obligé.
En fait j'ai un tableau de Cobjet pict2[] et la fonction etale renvoie
un Cobjet correctement remplie. Cet objet, c'est justement celui qui
est en variable globale.
while(c pas fini)
{
pict2[cpt] = etale(x, y);
cpt++;
}
Est ce qu'il faudrait pas que je fasse un delete juste après l'appel à
etale ? Vu que c'est assez obscure pour moi ces histoires de delete,
qu'est ce qu'il faut mettre dans le destructeur ? En fait il faudrait
juste supprimer le pointeur p (un int *) associé à l'objet non?
|
|
mardi 15 mars 2005 à 06:23:00 |
Re : Taille de tableau ?

NitRic
|
Personnellement, je te conseillerais d'utiliser un second pointeur avec realloc()
int * ptr = realloc( p, ... );
if ( NULL == ptr ) { perror("realloc()"); return; }
p = ptr; *(p ...) = ...;
realloc() peu très bien échouer et s'il échoue tu pers ta mémoire/pointeur => p Au fait, *(p + 0) == *p
Le delete ca dépend, si tu veux garder ton objet il ne faut pas faire de delete tout de suite, si tu as besoin de ton/tes objet(s) => pas de delete, seulement lorsque tu en as plus besoin. Si tu as un array d'objet par exemple:
OBJ arr[size]; arr[0] = new OBJ; arr[1] = new OBJ;
avant de remettre quelque chose dans `arr[0]` il faudrat supprimer ce qui si trouve:
delete arr[0]; arr[0] = new OBJ;
etc ...
Ton calcule n'est pas bon => 12000*2 = 24 ko Ce serait plutôt: 12000*2 *sizeof(int) = 93,75kB
Ton problème/erreur te dis simplement que tu vas `jouer` ou tu n'a pas le droit => access violation ... Vérifie tes pointeurs
Toute allocation, libération, ... de mémoire doit être valider:
type * variable = allocation_memoire(...); if ( NULL == variable ) { ERROR }
... ...
if ( NULL != variable ) { liberation_memoire( variable ); variable = NULL; }
~(.:: NitRic ::.)~
|
|
mardi 15 mars 2005 à 09:16:22 |
Re : Taille de tableau ?

Praxe
|
Ok merci bien, je vais faire tout ce que vous me conseillez (test pour realloc et vérifier l'adresse de mon pointeur).
|
|
Cette discussion est classée dans : taille, tableau, mémoire, pixels, coordonnées
Répondre à ce message
Sujets en rapport avec ce message
Allocation de mémoire dynamique [ par clmercutio ]
Hello, je me permet d'appeller a l'aide car je deviens fou. J'ai 2 ou 3 questions. Premierement, j'ai réalise un kakuro comme projet, pour la premiere
Taille mémoire limite? [ par by_rabbit_08 ]
Bonjour!Est-ce qu'il y a une taille de mémoire allouée limite à un programme (si on spécifie rien du tout donc..). Parce que dans mon programme qui e
!!! Pb d'allocation mémoire !!! [ par yoyo269 ]
Bonjour à tous !Comme le titre l'indique, j'ai un petit souci avec l'allocation de mémoire.En fait j'ai un char*, auquel j'applique un malloc. Ensuite
taille tableau constante avec variable [ par sudoku1983 ]
Bonjour.Je désire créer un tableau de taille constante mais cette taille dépant d'un calcul. J'ai une constante globale n et la taille du tableau est
Tableau de structures [ par RoulianRoss ]
Bonjour,j'ai une structure définie comme ceci:typedef struct{ char cIntitule[TAILLE_INTITULE]; // Intitulé de la voie char cUnite[
HDC et Tableau de Pixels [ par hilairenicolas ]
Bonjour,Je voudrais savoir si je suis obligé d'utiliser un HBITMAP et GetDIBits pour récuperer un tableau de pixels à partir d'un HDC ?N'y a-t-il pas
tableaux dynamique (à taille variable) : petite précision [ par Amanobuo ]
Salut ! J aimerai une petite précision sur les tableau dynamique, créé avec un new et un pointeur. Quant j'allou la memoire avec le pointeur : tableau
tableau de taille trop importante [ par samsagas01 ]
J'ai besoin d'un peu d'aide, je souhaite faire un programme untilisant une matrice (contenant les valeurs des pixels d'une image 600*800) et je n'arri
Impression d'un TStringGrid [ par eagleseyes ]
SalutJe cherche à imprimer un TStringGrid mais il me l'imprime à la taille de l'écran (tout petit sur un feuille A4) et tout le tableau d'un coup, du
traitement d'image à l'aide de Cximage [ par yoben ]
Bonjour,L'objectif de mon programme est de récupérer un tableau de pixels d'un fichier contenant une image à partir d'un emplacement quelconque du dis
Livres en rapport
|
Derniers Blogs
[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|