Array size too large

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Sous quel OS d'abord?

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

      Windows 98
      compilateur Borland c++ version 4.02

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

    Windows 98
    compilateur Borland c++ version 4.02

    Merci
    Serge
    1. Contributeur
      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++

      .  .
      \_/
      1. 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)
        1. Contributeur
          De C aussi ca date :-)

          .  .
          \_/
      2. Modérateur
        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.
        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];

          };