Array size too large

serge -  
steed06 Messages postés 7 Statut Membre -
Bonjour à tous,
Dans un programme j'ai crée une structure comme ceci:
struct
{
char nom[64]
char info[64]
} equipe[2000];

lorsque je compile le programme, j'ai le message array size too large. Lorsque je change 2000 pour 250 le programme fonctionne tres bien. J,ai fait des test ave malloc,halloc,new et j'ai toujours le meme message.
Merci pour votre aide.
Serge

6 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Sous quel OS d'abord?

    The software said "Requires Windows98, Win2000, or better,
    So I installed Unix.
    0
    1. serge
       
      bonjour,

      Windows 98
      compilateur Borland c++ version 4.02

      Merci
      Serge
      0
    2. serge
       
      Bonjour jisisv,
      connais tu une solution.
      Merci
      Serge
      0
  2. serge
     
    bonjour,

    Windows 98
    compilateur Borland c++ version 4.02

    Merci
    Serge
    0
  3. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Ca fait un truc enorme a la fin quand meme, tu as essaye avec des pointeurs?
    Moyennant ca, j'ai peur de ne pas pouvoir en dire plus, ca date mon dernier programme en C++

    .  .
    \_/
    0
  4. brj
     
    sachant q'un char 1 octet:
    pour une seule structure tu a 64+64=128 octets
    donc pour ton tableau de structure tu a =256koctets!!

    donc a moins d'avoir un 486 c pas un probleme d'espace memoire,
    c pas un problemes de C++ non plus( ;) c du C)
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      De C aussi ca date :-)

      .  .
      \_/
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jisisv Messages postés 3678 Statut Modérateur 936
     
    Bon, ça fait longtemps que je n'ai plus utilisé les produits Borland.
    Si tu calcule la taille de ton array , ça te fait 2000*(64+64) = 256000 octets
    Ca devrait fonctionner en pricipes sous Win98 , mais avec le modèle de
    segmentation pourri sous-jacent....
    Tu compile cette structure dans un prog 32bits win?
    Modèle HUGE.....ou LARGE ou qqch du genre?
    #include <strings.h>
    #include <stdio.h>
    #define MAX 2000
    int main(void)
    {
    struct
    {
    char nom[64];
    char info[64];
    } equipe[MAX];

    int i ;
    for (i=0 ; i<MAX; i++)
    {
    snprintf(equipe[i].nom, 64, "nom: %d", i);
    snprintf(equipe[i].info, 64, "info: %d", i);
    }
    for(i=0 ; i<MAX; i++)
    {
    printf("%s\t%s\n", equipe[i].nom, equipe[i].info);
    }
    return 0;
    }

    Ceci fonctionne sans problème sous Linux et FreeeBSD
    Remarque les ";" en fin de chaque array de la structure.
    Johan Daine

    The software said "Requires Windows98, Win2000, or better,
    So I installed Unix.
    0
  7. steed06 Messages postés 7 Statut Membre 1
     
    Sauf erreur ou oubli de ma part le petit code
    suivant devrait fonctionner

    #define MAX 2000;

    class TEquipe
    {
    char *nom;
    char *info;
    public:
    TEquipe(char *s1, char *s2); // constructeur
    ~TEquipe(); // destructeur
    void Imprime();
    } Equipe;

    TEquipe::TEquipe(char *s1, char *s2)
    {
    nom = new malloc(strlen(s1)+1);
    if (nom)
    strcpy(nom, s1)
    info = new malloc(strlen(s2)+1);
    if (info)
    strcpy(info, s2)
    }

    TEquipe::~TEquipe()
    {
    if (nom)
    delete nom;
    if (info)
    delete info;
    nom = NULL;
    info = NULL;
    }

    void TEquipe::Imprime()
    {
    printf("%s\t%s\n", nom, info);
    }

    TEquipe Equipe[MAX];

    int main()
    {
    // boucle d'initialisation
    for (int i = 0; i < MAX; i++)
    Equipe[i] = new TEquipe("chaine 1", "chaine 2");

    // boucle d'impression
    for (i = 0; i < MAX; i++)
    if (Equipe[i])
    Equipe[i]->Imprime();

    // boucle pour libération mémoire
    for (i = 0; i < MAX; i++)
    if (Equipe[i])
    delete Equipe[i];

    };
    0