histoires de malloc et de structures - C - Programmation
Marsh Posté le 06-04-2005 à 16:11:32
guanglier a écrit : |
Pas du C (et du mauvais C++...)
Plutôt que de mettre des cast aussi compliqués qu'inutiles, il vaut mieux utiliser des méthodes simples et fiables :
http://mapage.noos.fr/emdel/notes.htm#malloc
|
Pousse des cris si tu ne comprends pas...
Marsh Posté le 06-04-2005 à 16:14:57
en effet, jle met tjrs mais il ne sert pas la ....
des restes du c++
mais bon tu vois pkoi ça marche po , enfin pkoi ça plante ? car je trouve ça bon les def du tableau et le free !
Marsh Posté le 06-04-2005 à 16:27:17
Ton premier malloc n'est pas assez grand... Tu alloues un tableau d'(unsigned char) alors qu'il te faut un tableau d'(unsigned char *).
Marsh Posté le 06-04-2005 à 16:28:13
c'est ton premier malloc, il devrait allouer des pointeurs et non des char.
ps : 40Ko c'est pas un gros tableau
Marsh Posté le 06-04-2005 à 16:28:33
oups grillé
Marsh Posté le 06-04-2005 à 16:35:01
oula alors allons y par etape :
-----------------
#if 1
size_t n = 5000;
#else
size_t n = 5;
#endif
---------------
la je pousse un cri j'ai pas compris
matafan :
if ((im.val = (unsigned char**) malloc (sizeof(unsigned char) * n)) == NULL)
pour le premier malloc ct po bon ? ct po du tableau de char ?
fra0:
c'est ton premier malloc, il devrait allouer des pointeurs et non des char.
aaaaaaaaaaa je viens de comprendre ! ! ! !
lol quelle revelation ! !
merci tout le monde, je vais modifier mes trucs !
sinon Emmanuel ya tjrs des trcus obscures pour moi dans ton code !
merci
Marsh Posté le 06-04-2005 à 16:45:24
guanglier a écrit : oula alors allons y par etape : |
Avant de tester avec une matrice de 5000x5000, j'ai passé le code au détécteur de mensonge avec une matrice de 5x5, histoire de valider le principe...
Citation : sinon Emmanuel ya tjrs des trcus obscures pour moi dans ton code ! |
Si te ne dis pas quoi, on va pas avancer..
Marsh Posté le 06-04-2005 à 16:48:34
oué en fait c'etait juste pour ça ..
donc oui tu as change la taille pour voir ce que ça donne !
okayyy
sinon pour la "im.val[x] = malloc (n * sizeof *im.val[x]);"
pas besoin de parentheses pour le sizeof donc , je note
fflush (stdout);
j'y pensai pas mais oui il se pourrait que ce soit important !!
merci pour tout en tout cas!
Marsh Posté le 06-04-2005 à 16:09:28
bonjour
j'essaie de faire marcher un truc , en fait je dois allouer dynamiquement un gros tableau qui se trouve dans une structure, mais le truc plante lorsque je libere la memoire
a terme il faut que je passe un pointeur vers la structure a une fonction pour qu'elle traite les donn'es du tableau
voila le principal sous visual :
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
typedef struct IMAGE {
unsigned char **val; //val[x][y]
} image;
int main()
{
image im;
int x=0,
n=5000;
if ((im.val = (unsigned char**) malloc (sizeof(unsigned char) * n)) == NULL)
printf ("\nechec !\n" );
for (x = 0 ; x < n ; x = x + 1)
{
if ((im.val[x] = (unsigned char*) malloc (n * sizeof(unsigned char))) == NULL)
printf ("ERREUR allocation" );
}
printf ("allocation : x=%i\r", x);
printf ("\n destruction..." );
for (x=0 ; x<n; x=x+1){
printf ("f %i\r", x);
free (im.val[x]);
}
free (im.val);
}
donc voila si quelqu'un a une idée pour faire fonctionner tout ça, mercii !!