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

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

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

Windows 98
compilateur Borland c++ version 4.02

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

Windows 98
compilateur Borland c++ version 4.02

Merci
Serge
0
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
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
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
De C aussi ca date :-)

.  .
\_/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jisisv Messages postés 3678 Statut Modérateur 935
 
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
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