IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

langage c, taille de tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut langage c, taille de tableaux
    bonjour,

    j'ai deux petites questions :

    1) j'ai un créer un type qui contient des tableaux "2D" du style
    j'aimerais leur allouer une taille selon deux paramètres (n1 et n2).

    Comment faire cela?

    2) quel est la limite de la taile de tels tableaux ?

    j'ai une fonction qui avec un tableau 128x64 marche mais pas 1024x768...

  2. #2
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'abord pourquoi as-tu des '\n' entre chaque valeur ????


    Je croyais que tu avais compris avec l'autre post...

    le format ppm est (pour une ligne de pixel) soit :

    ADCDEFLGLGLGKGKKKMSMSSMMSVSMVMVMVSMMSMSVMMSMS... (< 70 caractères)

    pour le format raw, représentant :

    RVBRVBRVBRVBRVBRVBRVB......
    pix1pix2.....

    soit

    8 10 30 30 8 10 8 10 30 ....... (< 70 caractères)

    pour le format texte, représentant

    R V B R V B R V B ......
    pix1....pix2...pix3.......

  4. #4
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    En ce qui concerne les \n pour le ppm,cela marche bien (et est accepté dans le format : un blanc ou un retour à la ligne ...ou je ne sais plus quel espacement).
    L'avantage est que cela évite d'ajouter le test "si 70 caractères alors"...Et ça c'est niquel.

    En ce qui concerne la limite de mémoire, je suis quand même surpris vu que je peux déclarer un tableaux 1024x768 dans un programme "test"...et j'ai 2Go de RAM sous linux....de plus le programme suivant marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    int main()
    {
    	int t[1024][768];
    	int h,l;
    	for (h=0;h<1024;h++)
    		for(l=0;l<768;l++)
    			t[h][l]=h+l;
    	for (h=0;h<1024;h++)
    		for(l=0;l<768;l++)
    			printf("%d\n",t[h][l]);
    	return 0;
    }

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    Une petite question sur l'allocation dynamique de tableau 2D :
    on définit un pointeur de pointeur, c'est le tableau? En fait la vrai question est "est-ce que je peux accéder encore à mon tableau par [i][j] ou est-ce que je dois utiliser des pointeurs?".

    Je sais que se sont des questions simples pour beaucoup mais le C est tout nouveau pour moi, soyez indulgents svp.

  6. #6
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    Mea culpa.

    En ce qui concerne la taille de mes tableaux qui ne passe pas, j'ai trouvé!...en fait j'ai 3 tableaux tableaux...donc forcément la mémoire...
    Merci pour vos réponses sur ce sujets.

    Par contre mon tableau ne marche plus, je suis perdu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    typedef struct T_image
    {
    	char P[2];
    	int n;
    	int l;
    	int h;
    	int nb_col;
    	int *R;
    	int *V;
    	int *B;
    }T_image;
     
    void Initialiser(T_image I,int taille1,int taille2)
    {
    	I.R=malloc(sizeof(*R)*taille1*taille2);
    	I.V=malloc(sizeof(*R)*taille1*taille2);
    	I.B=malloc(sizeof(*R)*taille1*taille2);
    }

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Rniamo
    En ce qui concerne la limite de mémoire, je suis quand même surpris vu que je peux déclarer un tableaux 1024x768 dans un programme "test"...et j'ai 2Go de RAM sous linux....de plus le programme suivant marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    int main()
    {
    	int t[1024][768];
    	int h,l;
    	for (h=0;h<1024;h++)
    		for(l=0;l<768;l++)
    			t[h][l]=h+l;
    	for (h=0;h<1024;h++)
    		for(l=0;l<768;l++)
    			printf("%d\n",t[h][l]);
    	return 0;
    }
    Tu as définis le tableau en mémoire automatique. C'est une ressource limitée qui sert à définir quelques objets de petite taille. Ici, tu veux, au bas mot, un objet de 1572864 bytes, ce qui est évidemment trop pour la mémoire automatique.

    Il y a 2 solutions pour ce problème.

    - Définir le tableau en mémoire statique, ce qui, dans un main() (ou une tache), est tout à fait acceptable (mais douteux ailleurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main (void)
    {
       static int t[1024][768];
    - Définir le tableau en mémoire allouée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       int (*p)[1024][768] = malloc (sizeof *p);
       if (p != NULL)
       {
          int h, l;
          for (h = 0; h < 1024; h++)
          {
             for (l = 0; l < 768; l++)
             {
                (*p)[h][l] = h + l;
             }
          }
          for (h = 0; h < 1024; h++)
          {
             for (l = 0; l < 768; l++)
             {
                printf ("%d\n", (*p)[h][l]);
             }
          }
          free (p), p = NULL;
       }
       return 0;
    }
    Faut pas se tromper dans la syntaxe, sinon, c'est le crash grave... (le compilateur ne voit rien du tout).

  8. #8
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    merci de votre aide.

    C'est bon pour les "petites images" je peux faire ça...pour les grosses je vais revoir ma modélisation.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Rniamo

    2) quel est la limite de la taile de tels tableaux ?

    j'ai une fonction qui avec un tableau 128x64 marche mais pas 1024x768...
    ça dépend de ta mémoire et de ton OS...

    Par exemple :

    sous Windows 98, avec 4 Mo : taille max < 4 Mo
    sous Xp ??
    sous Unix/linux : 4 Mo de mémoire, 500 Mo de swap file, 500 Mo dispos...

    (les chiffres sont faux, mais c'est l'idée).

    Si tu as un système assez souple, la taille est assez grande et dépasse la mémoire physique, car il se sert d'une partie du hard drive.
    Si ça n'est pas le cas, c'est purement dépendant de la taille de la RAM.

    Sans compter que tu n'es pas le seul programme à tourner, et que donc tout n'est pas disponible...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Taille des tableaux par "autofit"
    Par loupgarou dans le forum VBA Word
    Réponses: 20
    Dernier message: 19/09/2008, 09h19
  2. Taille de tableaux
    Par SAKDOSS dans le forum C
    Réponses: 6
    Dernier message: 02/01/2008, 17h32
  3. Taille de tableaux
    Par kev484 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/10/2007, 15h23
  4. Taille des tableaux et Ubound
    Par Cris++ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/05/2007, 23h43
  5. [VB.Net] Limites du langage en taille de programme ?
    Par runn2 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/06/2006, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo