Allouer un GROS tableau en C
Résolu/Fermé
Deaven
-
Modifié par Deaven le 19/05/2010 à 16:26
Emmanuel Delahaye Messages postés 107 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 17 juillet 2019 - 20 mai 2010 à 09:32
Emmanuel Delahaye Messages postés 107 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 17 juillet 2019 - 20 mai 2010 à 09:32
A voir également:
- Allouer un GROS tableau en C
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Trier un tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
5 réponses
Emmanuel Delahaye
Messages postés
107
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
17 juillet 2019
7
19 mai 2010 à 19:01
19 mai 2010 à 19:01
Tu as oublié de poster le code avec lequel tu as un problème.
grou29
Messages postés
39
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
19 mai 2010
9
19 mai 2010 à 23:53
19 mai 2010 à 23:53
Attention
Sache que ton affirmation "Le même code marche très bien sur l'ancien ordi, ce n'est donc pas une erreur de programmation. " est fausse.
En informatique, il arrive que des programmes mal codés fonctionnent "par chance" sur un pc et pas sur un autre. voici quelques exemples:
- un logiciel avec plusieurs processus /threads se comportera différemment sur un pc multi-core ou hyperthreadé.
- d'un OS a l'autre l'accès a une zone non alloué peu échouer sur un et passer sur un autre.
- un pc configuré en anglais peut interpréter le point comme séparateur des décimal et pas un pc en français
- Le temps d'exécution d'un programme variant d'un Pc a l'autre, un programme peut se comporter différemment.
-
Grou29
http://lienssanslien.free.fr
Sache que ton affirmation "Le même code marche très bien sur l'ancien ordi, ce n'est donc pas une erreur de programmation. " est fausse.
En informatique, il arrive que des programmes mal codés fonctionnent "par chance" sur un pc et pas sur un autre. voici quelques exemples:
- un logiciel avec plusieurs processus /threads se comportera différemment sur un pc multi-core ou hyperthreadé.
- d'un OS a l'autre l'accès a une zone non alloué peu échouer sur un et passer sur un autre.
- un pc configuré en anglais peut interpréter le point comme séparateur des décimal et pas un pc en français
- Le temps d'exécution d'un programme variant d'un Pc a l'autre, un programme peut se comporter différemment.
-
Grou29
http://lienssanslien.free.fr
Mon code est un code scientifique faisant dans les 3000 lignes de code... ^^
Après quelque test, le problème vient de l'allocation suivante:
{
int maxat=15000;
int nx=100, ny =100, nz =100, maxliste = 200;
int cliste(nx)(ny)(nz)(maxliste);
int vliste(maxat)(maxliste);
//Remplacer les parenthèses par des crochets
return 0;
}
ça ne marche pas non plus si je fais ça :
{
int cliste(nx*ny*nz*maxliste);
//Toujours remplacer les parenthèses par des crochets
}
Peut être faut il que je passe par un malloc ? ( ce qui m'arrange pas vu le jeu d'indice qu'il va falloir que je fasse dans le code...)
à noter que quand je descend les entiers maxat, nx, ny, nz, maxliste, le code se remet à marcher.
Grou29 : Qu'entends tu par tes deux premiers points ?
Existe t'il des bibliothèque standards qui gèrent ce genre de problème d'allocation ? ou des options de compilation ?
Je n'utilise que <stdio.h> <math.h> (avec l'option -lm à la compil) et <time.h>
Je suis assez surpris que personne ne trouve, je pensais que c'était un problème tout bête ... :(
Après quelque test, le problème vient de l'allocation suivante:
{
int maxat=15000;
int nx=100, ny =100, nz =100, maxliste = 200;
int cliste(nx)(ny)(nz)(maxliste);
int vliste(maxat)(maxliste);
//Remplacer les parenthèses par des crochets
return 0;
}
ça ne marche pas non plus si je fais ça :
{
int cliste(nx*ny*nz*maxliste);
//Toujours remplacer les parenthèses par des crochets
}
Peut être faut il que je passe par un malloc ? ( ce qui m'arrange pas vu le jeu d'indice qu'il va falloir que je fasse dans le code...)
à noter que quand je descend les entiers maxat, nx, ny, nz, maxliste, le code se remet à marcher.
Grou29 : Qu'entends tu par tes deux premiers points ?
Existe t'il des bibliothèque standards qui gèrent ce genre de problème d'allocation ? ou des options de compilation ?
Je n'utilise que <stdio.h> <math.h> (avec l'option -lm à la compil) et <time.h>
Je suis assez surpris que personne ne trouve, je pensais que c'était un problème tout bête ... :(
Je suis désolé, il fallait juste passer par la fonction malloc qui doit mieux gérer les allocations mémoires que la simple déclaration de tableau.
Je suis très confu... merci quand même de vos réponse.
Je suis très confu... merci quand même de vos réponse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Emmanuel Delahaye
Messages postés
107
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
17 juillet 2019
7
Modifié par Emmanuel Delahaye le 20/05/2010 à 09:36
Modifié par Emmanuel Delahaye le 20/05/2010 à 09:36
Plutôt que de bricoler avec "les () à remplacer par des crochets," utiliser les balises code avec le bouton "<>".
En ce qui concerne l'allocation de gros tableaux, je te conseille de lire ceci pour comprendre pourquoi ton code risquait de ne pas fonctionner :
http://www.bien-programmer.fr/notes.php#donnees
Tu utilisais la mémoire locale (automatique) qui est limitée (aucun contrôle). La mémoire allouée est aussi limitée (bien plus haut) et au moins, si l'allocation échoue, on est prévenu.
http://www.bien-programmer.fr/notes.php#malloc
http://www.bien-programmer.fr/notes.php#tabdyn_2d
C is a sharp tool
C'est nettement plus clair int x[10];
En ce qui concerne l'allocation de gros tableaux, je te conseille de lire ceci pour comprendre pourquoi ton code risquait de ne pas fonctionner :
http://www.bien-programmer.fr/notes.php#donnees
Tu utilisais la mémoire locale (automatique) qui est limitée (aucun contrôle). La mémoire allouée est aussi limitée (bien plus haut) et au moins, si l'allocation échoue, on est prévenu.
http://www.bien-programmer.fr/notes.php#malloc
http://www.bien-programmer.fr/notes.php#tabdyn_2d
C is a sharp tool