Array size too large
serge
-
steed06 Messages postés 7 Statut Membre -
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
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
-
Sous quel OS d'abord?
The software said "Requires Windows98, Win2000, or better,
So I installed Unix. -
-
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++
. .
\_/ -
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) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -
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];
};