IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème d'allocation mémoire


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut problème d'allocation mémoire
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void flip(image* img) {
    	int i, j;
    	char *tmp = NULL;
    	for(i=0; i<(img->h/2); i++) {
    		tmp = (char*) malloc(sizeof(img->w*3));
    		for(j=0; j<img->w*3; j++) { // je récupére une ligne vers le debut.
    		printf("i1:j%d, ",j);
    			tmp[j] = img->data[(i*img->w*3)+j];
    		}
    		for(j=0; j<img->w*3; j++) { // je récupère une ligne vers la fin que je met a la place de la première.
    		printf("i2:j%d, ",j);
    			img->data[(i*img->w*3)+j] = img->data[((img->h-i)*img->w*3)+j];
    		}
    		for(j=0; j<img->w*3; j++) { // la ligne que j'ai récupérer au debut je l'insert a la fin.
    		printf("i3:j%d, ",j);
    			img->data[((img->h-(i+1))*img->w*3)+j] = tmp[j];
    		}
    		printf("\nok\n");
    		free(tmp);
    		printf("\nok\n");
    	}
    }
    Une erreur survient quand on arrive au "free(tmp)";
    le premier ok s'affiche mais pas le deuxième, j'ai passé une heure a chercher l'erreur mais la j'en peux plus, je fait donc appelle à vous

    sa doit juste être une petite erreur de rien du tout.

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salut,

    si tu veux allouer 3 fois la largeur de ton image en char le bon malloc est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp = (char*) malloc( sizeof(char) * (img->w*3) );

    Ton allocation est mauvaise car tu détermines la taille mémoire occupée par (img->w*3), en supposant que img->w est de type int, on va calculer la valeur de img->w*3, qui sera de type int, et le sizeof vaudra 4 ou 8 suivant le système. D'où l'utilisation de mémoire non allouée par la suite qui conduit à ce comportement étrange.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut
    bien joué ! erreur stupide de ma part !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'allocation mémoire
    Par Fibus dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 10/01/2008, 16h35
  2. Problème d'allocation mémoire
    Par elmayor1983 dans le forum C++
    Réponses: 5
    Dernier message: 14/02/2007, 10h08
  3. Problème d'allocation mémoire et fork
    Par Conap dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2006, 15h34
  4. Problème d'allocation mémoire
    Par araya dans le forum C
    Réponses: 2
    Dernier message: 04/05/2006, 20h03
  5. Problème d'allocation mémoire
    Par cali1983 dans le forum C++
    Réponses: 10
    Dernier message: 10/03/2006, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo