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 :

Tableau C probleme de taille


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Par défaut Tableau C probleme de taille
    Bonjour, je suis actuellement en train d essayer de display une sortie web d'un fichier extrait de tcpdump.

    J ecoute le rezo avec tcpdump et je display les packets sur ma page web.

    J'ai un probleme, pour 10/100 packets, ca passe et j affiche mon tableau de packets sans probleme.

    quand j essaye d afficher 200 packets, mon programme freeze, je pense ke c du a la taille de mon tableau qui devient trop grande

    Je declare mon enregistrement et mopn tableau comme ceci:

    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
     
     
    typedef struct packet_type{
      unsigned char id[IDLEN];
      char timestamp[20];
      char packtype[10];
      char srcip[100];
      char srcport[10];
      char dstip[100];
      char dstport[10];
      char type[10];
      char type2[10];
      char length[10];
    }scanresults_t;
    #define MAXSCANRESULTS 10000
    scanresults_t scanresults[MAXSCANRESULTS];
    unsigned int scanresultslen=0;
    Le programme s arrete kan j essaye de rentrer les valeurs dans le tableau:


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    int getscanresults(){
     
     
    for(scanresultslen=0;scanresultslen<nbpackets;scanresultslen++) //MAXSCANRESULTS
        { 
             sscanf(p,"%s",scanresults[scanresultslen].timestamp);
     
    	 #ifdef DEBUG1
    	 //printf("Time:%s\n",scanresults[scanresultslen].timestamp);
    	 #endif
     
    	 while (*p!=' ') { p++; }
    	 p++;
     
    	 sscanf(p,"%s",scanresults[scanresultslen].packtype);
       	 #ifdef DEBUG2
    	 printf("Packet Type:%s\n",scanresults[scanresultslen].packtype);
    	 #endif
    	 if (!strcmp(scanresults[scanresultslen].packtype,"arp")) {
    	 	while (*p!=' ') { p++; }
    	 	p++;
    	 	sscanf(p,"%s",scanresults[scanresultslen].type);
    		#ifdef DEBUG2
    		printf("TYPE:%s\n",scanresults[scanresultslen].type);
    		#endif
    		while (*p!=' ') { p++; }
    	 	p++;
    	 	sscanf(p,"%s",scanresults[scanresultslen].dstip);	
    		#ifdef DEBUG2
    		printf("DST:%s\n",scanresults[scanresultslen].dstip);
    		#endif
    		while (*p!=' ') { p++; }
    	 	p++;
    		while (*p!=' ') { p++; }
    	 	p++;
    	 	sscanf(p,"%s",scanresults[scanresultslen].srcip);
    		#ifdef DEBUG2
    		printf("SRC:%s\n",scanresults[scanresultslen].srcip);
    	 	printf("<br><br>");
    		#endif
    		}
    	 else {
     
    	 while (*p!=' ') { p++; }
    	 p++;
    	 sscanf(p,"%s",src);
    	 char srcip[100];
    	 #ifdef DEBUG2
    	 printf("SRC:%s\n",src);
    	 #endif
    	 //strcpy(srcip,scanresults[scanresultslen].src);
    	 //char *p1=scanresults[scanresultslen].src
     
     
     
    	 while (*p!='>') { p++; }
    	 p=p+2;
    	 sscanf(p,"%s",dst);
    	 #ifdef DEBUG2
    	 printf("DST:%s\n",dst);
    	 #endif
     
    	 while (*p!=' ') { p++; }
    	 p++;
    	 sscanf(p,"%s",scanresults[scanresultslen].type);
    	 #ifdef DEBUG2
    	 printf("TYPE:%s\n",scanresults[scanresultslen].type);
    	 #endif
    	 //If ICMP => no port ...
    	  getdstdata();
    	  getsrcdata();
     
    	 if (!strcmp(scanresults[scanresultslen].packtype,"IP") && (!strcmp(scanresults[scanresultslen].type,"UDP,") || !strcmp(scanresults[scanresultslen].type,"ICMP"))) {
    	 	while (*p!=' ') { p++; }
    	 	p++;
    	 	while (*p!=' ') { p++; }
    	 	p++;
    		sscanf(p,"%s",scanresults[scanresultslen].length);
    		#ifdef DEBUG2
    		printf("Length:%s\n",scanresults[scanresultslen].length);
    		printf("<br><br>");
    		#endif
    		} 
    	 if (!strcmp(scanresults[scanresultslen].packtype,"IP") && !strcmp(scanresults[scanresultslen].type,"tcp")) {
    		while (*p!=' ') { p++; }
    	 	p++;
    		sscanf(p,"%s",scanresults[scanresultslen].length);
    		#ifdef DEBUG2
    		printf("Length:%s\n",scanresults[scanresultslen].length);
    		printf("<br><br>");
    		#endif
    		}
     
     
    	 if (!strcmp(scanresults[scanresultslen].packtype,"IPX")) {
    	 	while (*p!=' ') { p++; }
    	 	p++;
    		sscanf(p,"%s",scanresults[scanresultslen].length);
    		#ifdef DEBUG2
    		printf("Length:%s\n",scanresults[scanresultslen].length);
    		printf("<br><br>");
    		#endif
    		} 
     
     
     
    	}	
    		//else {
    		//if (strcmp(scanresults[scanresultslen].packtype,"UDP")) {
    		//	sscanf(p,"%s",scanresults[scanresultslen].length);
    		//} else {
    		//	sscanf(p,"%s",scanresults[scanresultslen].type2);
    		//	}
     
     	while (*p!='\n') { p++; }
    	 	p++;
    }
     
    }

    Merci d avance

  2. #2
    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 TeKaBloK
    Bonjour, je suis actuellement en train d essayer de display une sortie web d'un fichier extrait de tcpdump.
    Bonjour, je suis actuellement en train d'essayer d'afficher le contenu d'un fichier HTML fourni par l'utilitaire tcpdump.

    J ecoute le rezo avec tcpdump et je display les packets sur ma page web.
    J' écoute le reseau avec tcpdump et j'affiche les paquets via une page web.

    J'ai un probleme, pour 10/100 packets, ca passe et j affiche mon tableau de packets sans probleme.

    J'ai un problème, pour 10/100 paquets, ça passe et j'affiche mon tableau de paquets correctement.

    quand j essaye d afficher 200 packets, mon programme freeze, je pense ke c du a la taille de mon tableau qui devient trop grande

    quand j'essaye d'afficher 200 paquets, mon programme se bloque, je pense que c'est dû à la taille de mon tableau qui devient trop importante

    Je declare mon enregistrement et mopn tableau comme ceci:
    Je définis mon enregistrement et mon tableau comme ceci:
    Si le code est aussi mal rédigé, ça ne m'étonne pas que ça ne fonctionne pas...

    Les accents, je peux comprendre (Clavier QWERTY...), les fautes de frappes, avec Firefox 2 et son module correcteur, c'est déjà plus difficile, mais les fautes volontaires et les anglicismes, non. Faut pas exagérer.

    Project : Forums
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:4: error: `IDLEN' undeclared here (not in a function)
    main.c: In function `getscanresults':
    main.c:22: error: `nbpackets' undeclared (first use in this function)
    main.c:22: error: (Each undeclared identifier is reported only once
    main.c:22: error: for each function it appears in.)
    main.c:24: error: `p' undeclared (first use in this function)
    main.c:37: warning: implicit declaration of function `strcmp'
    main.c:64: error: `src' undeclared (first use in this function)
    main.c:76: error: `dst' undeclared (first use in this function)
    main.c:88: warning: implicit declaration of function `getdstdata'
    main.c:89: warning: implicit declaration of function `getsrcdata'
    main.c:65: warning: unused variable `srcip'
    Process terminated with status 1 (0 minutes, 2 seconds)
    7 errors, 4 warnings
    "Interesting ..."
    -- Mr Tuvok in Voyager, 4.1

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Par défaut
    Excuses moi de ne pas utiliser mon meilleur francais...

    Effectivement, j'utilise un calvier QWERTY et mon firefox 2.0 étant dans sa version anglaise, je n'ai pas le droit à la correction d'orthographe.

    Je comprends bien que mon code n'est pas très propre... Je n'avais jamais fait de C avant de l'apprendre par moi-même.

    Je voudrais juste savoir si on est limité en taille de tableau d'enregistrement sur LinuX sachant que j'utilise un système avec 16Mo de mémoire.

    Si tu peux m'aider, je posterais mon code entier demain Je suis chez moi la, j'ai finis le travail.

    Merci.

    PS: Pour mes anglicismes, désolé, je fais parti des expatriés français [Dubai]. Utilisant l'anglais à 100% durant mon travail, j'ai tendance à l'utiliser en français aussi.

  4. #4
    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 TeKaBloK
    Excuses moi de ne pas utiliser mon meilleur francais...

    Effectivement, j'utilise un calvier QWERTY et mon firefox 2.0 étant dans sa version anglaise, je n'ai pas le droit à la correction d'orthographe.

    Je comprends bien que mon code n'est pas très propre... Je n'avais jamais fait de C avant de l'apprendre par moi-même.

    Je voudrais juste savoir si on est limité en taille de tableau d'enregistrement sur LinuX sachant que j'utilise un système avec 16Mo de mémoire.

    Si tu peux m'aider, je posterais mon code entier demain Je suis chez moi la, j'ai finis le travail.

    Merci.

    PS: Pour mes anglicismes, désolé, je fais parti des expatriés français [Dubai]. Utilisant l'anglais à 100% durant mon travail, j'ai tendance à l'utiliser en français aussi.
    Ah, mais tu sais aussi parler français ? C'est bien.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 67
    Par défaut
    J'avoue, je n'ai pas regardé ton code.

    Par contre j'ai vu que ta structure scanresults_t n'a pas une taille negligeable et multiplié par 10000 il peut y avoir des problemes (par contre dès 200 ca m'etonne!).
    Ton tableau scanresults[MAXSCANRESULTS] est local ou global ?

    Si c'est une locale, le compilo alloue statiquement ton tableau dans la pile. Dans ce cas il y a une limite a la taille des données contenues dans la pile. Elle est déterminée par le compilo. Avec visual, je crois que c'est 1 Mo.

    Donc tres vite tu peux atteindre cette limite (surtout avec les fonctions recursives).

    Pour lever le doute, passe ta variable en global ou en local statique.
    Si ca résoud le probleme c'est que tu avais écrasé la pile.

    Mais passer sa variable en global n'est génial, le mieux c'est de passer à l'allocation dynamique (malloc/free).

Discussions similaires

  1. Probleme de taille de tableau
    Par Forza Correza dans le forum C++
    Réponses: 14
    Dernier message: 01/10/2006, 23h17
  2. [HTML]Probleme de taille d'un input (dans un tableau)
    Par Shinji69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 27/04/2006, 12h11
  3. Problème de taille avec les tables
    Par Angelico dans le forum Paradox
    Réponses: 2
    Dernier message: 27/12/2004, 18h38
  4. probleme de taille de title bar
    Par Daniel Spring dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/11/2004, 17h26
  5. [Memo] Probleme de taille...
    Par NoisetteProd dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/08/2003, 11h42

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