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 :

Not enough space


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Par défaut Not enough space
    Bonsoir à tous,
    J'ai un tableau qui me retourne un Null et um message m'affiche « Not enough space code de l'erreur 12 ». En se basant sur ce lien http://www.developpez.net/forums/d13...e-1-dimension/ , j'ai ajouté l'instruction ci-dessous à la fin de mon code pour voir si je dépasses la taille admise ou pas.
    « printf ("_HEAP_MAXREQ = %llx\n",(unsigned long long int)_HEAP_MAXREQ); ».
    Malheureusemnt? j'ai eu ces deux warning :
    «unknown conversion type character 'l' in format»
    «too many arguments for format »
    Comment je peux le régler sachant que je code en C sous windows7 64 bit?
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Bonjour,

    Un tableau ne peut pas « te retourner » un NULL. Ce n'est pas une fonction.

    Peut-on voir ton code et, en particulier, la manière dont est alloué ton tableau ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Par défaut
    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
     
            pile= malloc (n*sizeof (long int));
            if (pile==NULL)
            {
                printf ("pile Code de l'erreur : %d\n", errno);
                perror("Erreur");
            }
            else
            {
     
                fonction (n,copie1,sum,fichier);
                if(pile != NULL)
                {
                    solution++;
                }
     
                free (pile);
                pile=NULL;
            }
    J'ai le message suivant pile code de l'erreur 12 : not enough space

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Et que vaut n ?

    La macro que tu présentes est définie dans malloc.h et semble spécifique à Windows : http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx Je n'ai perso pas les erreurs de compilation que tu décris. Attention quand même à cette valeur : elle n'est pas dynamique. Cela veut dire que c'est la taille maximale potentielle que tu peux demander. Cela ne veut pas dire qu'à un instant t, tu puisses demander tout ça car la quantité de mémoire disponible est sûrement inférieure.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Par défaut
    n= 60
    j'ai les allocations suivante avant pile :
    Tableau = malloc (60 * sizeof(job));job est de type struct, elle contient 4 champs de type long int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ordre = malloc (57 * sizeof(long int));
    copie1 = malloc (60 * sizeof(job));
    ens et combi dans une procedure qui génèrent toutes les combinaisons possibles de combi parmi ens (par exemple je veux 27C11 ) :
    ens = malloc (27*sizeof (long int)); combi= malloc (11*sizeof (long int));puis à chaque combinaison généré je réserve pile je fais des calcules et je réserve choix. (nbre entre 0 et 60 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    nbre=0;
    choix= malloc (nbre *sizeof (long int));
     for (i=0;i<n;i++)
                {
                    if (copie1[i].d>=sum)
                        nbre++;
                 }
     
    choix= realloc(choix, sizeof(long int) *nbre);
    et je désalloue choix puis pile
    pile= malloc (60*sizeof (long int));et a la fin de mon programme je désalloue ens, combi, copie1, tableau et ordre

    J'ai fais un code test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
     
    int main()
    {
        printf("Hello world!\n");
        printf ("_HEAP_MAXREQ = %llx\n",(unsigned long long int)_HEAP_MAXREQ);
        return 0;
     
    }
    et j'ai les même erreurs de compilation (je code avec code blocks).

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tu compiles sans modifier les options de compilation par défaut ? Si oui, l'option par défaut est sûrement un mode C89/90, c'est-à-dire soit -ansi soit -std=gnu90. Or, le type long long int est venu avec le C99 si ma mémoire est bonne. Rajoute donc une option -std=c99 dans les options du compilateur pour voir si cela corrige le problème.

    Pour ce qui est du problème mémoire, il faut que tu essayes de créer un code minimum qui reproduise le problème, en réduisant ton code actuel.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/08/2011, 13h30
  2. could not reserve enough space
    Par khaoula_14_05 dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 08/05/2009, 14h01
  3. Could not reserve enough space for object heap
    Par zerocoolyoussef dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 03/05/2009, 20h13
  4. [BODI]erreur Db:not enough space
    Par tigrebin dans le forum BODI
    Réponses: 3
    Dernier message: 06/04/2009, 10h13
  5. Could not reserve enough space for object heap
    Par lestathor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 30/10/2007, 17h35

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