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

Linux Discussion :

[C]éclairssisement allocation dynamique


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut [C]éclairssisement allocation dynamique
    Bonjour à tous je suis devouring 22 célibataire et libre comme l'air (c'est vrai en plus) j'ai un léger soucis avec le fonction de malloc.
    je travail sous mac (donc xcode) et lorsque je lors de l'exécution de mon programme je crée un tableau de 1 millions sur 1 millions (un tableau 2D) et comme je m'y attend ca marche pas (j'ai que 2 go après tout).
    par contre je m'attendais pas à avoir ce message

    Projet Automate(1077) malloc: *** mmap(size=400003072) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug

    normalement quand l'ordi n'a pas de mémoire à allouer il dit a mon programme revient "non je n'ai pas de mémoire a te preter" et l'affaire est close non?
    alors pourquoi ce message d'erreur et comment l'eviter?


    voilà le code en question si ca peut servir

    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
    23
    	do
    	{
    		continu = 1;
    		printf("\nVeuillez saisir la longueur de la grille : ");
    		longeur = saisieLong();
    		printf("\nVeuillez choisir la largeur de la grille : ");
    		largeur = saisieLong();
     
    		grille1 = malloc(longeur * sizeof(long));
    		for(long cpt = 0 ; cpt < longeur ; cpt ++)
    			grille1[cpt] = malloc(largeur * sizeof(long));
     
    		grille2 = malloc(longeur * sizeof(long));
    		for(long cpt = 0 ; cpt < longeur ; cpt ++)
    			grille2[cpt] = malloc(largeur * sizeof(long));
     
    		if(grille1 != NULL && grille2 != NULL)
    			continu = 0;
    		else
    		{
    			printf("\nGrille trop grande pas assez de mémoire veuillez rentrez des valeurs moins importantes\n");
    		}
    		}while(continu);

  2. #2
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,
    Citation Envoyé par devouring strossus Voir le message
    Projet Automate(1077) malloc: *** mmap(size=400003072) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug

    normalement quand l'ordi n'a pas de mémoire à allouer il dit a mon programme revient "non je n'ai pas de mémoire a te preter" et l'affaire est close non?
    Je comprends pas trop ce qui te choque: tu t'attends a ce que l'ordi te dise qu'il ne peut pas allouer la memoire et effectivement il te dit qu'il ne peut pas allouer la memoire. Ou est le probleme?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    je m'attend à ce qu'il refuse d'allouer la memoire qu'il laisse mon pointeur sur en tant que NULL et qu'il passe aux autres instructions et non qu'il plante parce qu'il y a pas assez de memoire en m'affichant un joli message

  4. #4
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Quand tu lances dans un EDI souvent tu lances un debogger en meme temps. Pour xcode je ne sais pas mais vu la derniere ligne du message d'erreur je pense que c'est possible. Tu as essaye de lancer ton programme hors d'xcode?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    oui ca me fait la même chose, il faudra donc que j'empêche l'utilisateur de taper un trop grand nombre

  6. #6
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Je pense que je vois le probleme: tu alloue une grande taille pour ta premiere dimension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille1 = malloc(longeur * sizeof(long));
    Mais si cette allocation echoue (ce qui est tres probable vu la taille) alors ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	for(long cpt = 0 ; cpt < longeur ; cpt ++)
    			grille1[cpt] = malloc(largeur * sizeof(long));
    Tu adresses un pointeur null
    Ca plante toujours si tu fais ca?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ((grille1 = malloc(longeur * sizeof(long))) != NULL)
    	for(long cpt = 0 ; cpt < longeur ; cpt ++)
    		grille1[cpt] = malloc(largeur * sizeof(long));
     
    if ((grille2 = malloc(longeur * sizeof(long))) != NULL)
    	for(long cpt = 0 ; cpt < longeur ; cpt ++)
    		grille2[cpt] = malloc(largeur * sizeof(long));

Discussions similaires

  1. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27
  2. petit pbm allocation dynamique de stringGrid
    Par AnneOlga dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/01/2004, 11h59
  3. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  4. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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