[C] Stack Overflow

Stack Overflow [C] - C - Programmation

Marsh Posté le 17-10-2008 à 14:05:45    

Salut
 
J'ai le bout de coude suivant :

Code :
  1. printf("ok\n" );
  2. int i=0;
  3. int array[validPacketsNumber][4];
  4. for(i=0;i<validPacketsNumber;i++){
  5.  byte_ptr+=int_ptr[i];
  6.  printf("pk1\n" );
  7.  nativeMainHeaderArray[i][0]=id;
  8.  printf("pk2\n" );
  9.  nativeMainHeaderArray[i][1]=type;
  10.  printf("pk3\n" );
  11.  nativeMainHeaderArray[i][2]=flag;
  12.  printf("pk4\n" );
  13.  nativeMainHeaderArray[i][3]=length;
  14.  printf("pk5\n" );
  15. }


 
Pas de prob de compilation.
A l'exécution, le "ok" s'affiche bien, mais pas le pk1.
Jai une erreur :
ECEPTION_STACK_OVERFLOW
En fait je soupconne validPacketsNumber d'être trop grand. C ne peut pas créer un tableau aussi grand ?
Dans certains cas, avec des valeurs petites pour validPacketsNumber ca marche nickel (genre validPacketsNumber=6000)
Mais là j'ai validPacketsNumber=42624 et ca marche pô :(
Des idées pour palier au problème ?

Reply

Marsh Posté le 17-10-2008 à 14:05:45   

Reply

Marsh Posté le 17-10-2008 à 14:12:04    

crée le avec un appel à malloc au lieu de le mettre sur ta pile

Reply

Marsh Posté le 17-10-2008 à 14:17:28    

ouais alors j'ai jamais trop fait les mallocs pour les tabs à deux dimensions.
Ca va ça :
int *tab=malloc(validPacketNumber*4*sizeof(int));
for(...){
    tab[4*i+0]=id;
    tab[4*i+1]=type;
    tab[4*i+2]=flag;
    tab[4*i+3]=length;
}
je 'occupe de mon tableau
puis free(tab) à la fin
 
du coup on a un tab à une seule dimension mainteannt, mais c'est pas bien génant.
 
je peux quand meme garder un tab à deux dimensions en mallocant ?

Reply

Marsh Posté le 17-10-2008 à 14:25:03    

J'ai tendance à penser qu'un groupe de 4 entiers ne devrait pas trainer dans la nature, tu as probablement un moyen logique de les regrouper dans ta structure. Du coup, la création de ton tableau sera plus logique.
 
sinon, oui, tu peux faire un tableau à deux dimensions, mais ce n'est pas nécessairement une bonne idée, vu que ca impliquera de faire une indirection supplémentaire (tableau d'int * pointant eux-mêmes sur des tableaux de 4 entiers)

Reply

Marsh Posté le 17-10-2008 à 14:50:35    

ok j'ai fait un tableau à deux dimensions. En fait après je dois le passer à Java via JNI, qui attend un tableau à deux dimensions. Mais ca marche nickel maintenant, merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed