Taille mémoire limite?

by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 - 10 mai 2007 à 19:25
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 - 15 mai 2007 à 20:45
Bonjour!
Est-ce qu'il  y a une taille de mémoire allouée limite à un programme (si on spécifie rien du tout donc..). Parce que dans mon programme qui est assez long, j'arrive à un moment où j'ai un bouton parcourir, qui ouvre donc la boite de dialogue standard windows pour rechercher un fichier. Si je fais ouvrir, tout ce passe bien.
Mais le problème, est que si je déclare encore une seule variable n'importe où, le programme plante... Et je comprends pas pourquoi, serait-il possible d'avoir de l'aide?
Merci

24 réponses

by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
10 mai 2007 à 19:27
PS: Je voulais juste préciser, que mon programme plante au moment où je fais ouvrir, quand je rajoute cette fameuse variable... Et c'est bien entendu... la typique erreur windows, envoyer, ne pas envoyer, machin-truc, etc,...
enfin bref
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
10 mai 2007 à 20:53
Salut,

Ca m'a tout l'air d'etre une segfault et tu devrait faire du C++ donc
Faut donc que tu regardes toutes tes allocations partout pour voir ou ca pourrait planter et que ca risque d'etre dur a debugguer

Une autruche ne se cuit pas aux petits lardons.
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
10 mai 2007 à 21:20
Ah mince... Je comprends vraiment pas ce que j'ai pu faire faux, ça peut être quoi par exemple comme faut que j'ai fait? Au moins pour savoir dans quelle direction faut chercher..
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
10 mai 2007 à 21:37
Salut,

OK ce que tu as pu faire c'est:

_ allouer 10 cases dans ton tableau et ecrire sur 11 cases
_ liberer une variable et continuer de l'utiliser
_ mal initialiser des pointeurs

Donc au final ca va pas etre facile a debugguer, voilà en gros.

Une autruche ne se cuit pas aux petits lardons.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
10 mai 2007 à 21:53
ah ouais ok... ben... je vais tanter de regarder alors, merci...
PS: si quelqu'un imagine encore une autre possiblité, c'est bienvenue
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
10 mai 2007 à 22:34
Comment déclares tu tes variables ?
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
11 mai 2007 à 17:25
tu peux aussi avoir des problèmes si tu crées des variables dynamiques sans les détruire lorsque tu as fini de les utiliser.

Loki
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
11 mai 2007 à 18:19
ben quand j'utilise des fonction (enfait, des procédure pour les boite de dialogues) je déclare certaine variable dans la procédure et d'autres dans la page de code, en global....
J'en déclare aussi en extern, pour tout mon projet
Donc par exemple comme cela (enfait tout simple...)
int variable 1
char variable[100]
...
je vois pas ce que je fais de mal enfait...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 mai 2007 à 12:18
Et tu en as beaucoup des déclarations en global ?
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
12 mai 2007 à 12:39
Ben disons, que quand je dis global, pour rester clair, c'est simplement que je déclare les variables en dehors des fonctions... Je n'écris global nul part... Mais pas plus que les autres... Mais disons que la, je n'arrive plus rien à rajouter, et je me demande, si c'est pas à cause de mon bouton parcourir, qui me lance la fenêtre d'ouverture de windows... Est-ce que c'est possible?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 mai 2007 à 13:45
Oui mais en a tu beaucoup des variables définies hors des fonctions ? Donne la liste.
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
12 mai 2007 à 18:20
Donc j'ai une page où il y a que les procédures de dialogues, et j'ai donc ces variables la en dehors des fonctions:

char AncienMDP[100],NouveauMDP[100],ConfirmeMDP[100], login_temp_replace[100];
int test,test2,user_cat;
HWND groupbox_hDlg3,Radio1,Radio2,combo_3;
UINT temp_forme;
int temp_finish;
int temp_paint;
int k4,j4,choix1;


//Thread
HANDLE hThread2;




//hDlg3
HWND edit_compte,edit_mdp,edit_confirme_mdp,combo_1,edit_compte2;
char compte[255],mdp[255],mdp2[255], compte_temp[255];


//variable globale
int num_error2,num_error3;
char temp_pass[255];
//var glob, proc2
int temp_return_dial2;

je pense que c'est pas énorme, mais si ca peut aider qqun à m'aider :P
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
12 mai 2007 à 18:32
Salut  by_rabbit_08

Si tu nous donnes pas aussi les fonctions qui utilisent ces variables, on va pas pouvoir faire la difference entre locale/globale et on va pas pouvoir trouver l'endroit ou ca segfaulte

Une autruche ne se cuit pas aux petits lardons.
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
13 mai 2007 à 00:25
Ben écoute, le problème c'est que ca utilise à peut près 500 fonctions... donc c'est un peu le bordel...
Mais si t'arrive me dire, les différents problèmes qu'il peut y avoir, et qu'est-ce que je pourrais faire en fonction de ces problèmes, ca serait déjà super simpa :O
Enfin merci d'avance!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
13 mai 2007 à 00:27
Non en effet, c'est fait pas beaucoup de variables globales. Donc a part un pb dans ton code, j'ai pas d'idée.
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
13 mai 2007 à 00:29
Est-ce que ca serait possible, que ça soit la fonction de windows, avec getopenfilename, pour ouvrir un fichier, qui serait la source du problème? parcke à part ca, si j'enlève cette partie du code, tout se passe à merveille :S
Est-ce qu'il me faudrait créer une nouvelle boite de dialogue pour ouvrir un fichier?
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
13 mai 2007 à 17:36
donnes le code(complet) de la fonction dans laquelle tu ouvres cette boite de dialogue

~(.:: NitRic ::.)~
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
13 mai 2007 à 18:28
Voila...
Mais comme vous pouvez le voir, rien que cette fonction est très longue. Mais si ca peut aider à trouver la solution, ben c pas grave...

//variables pour tous le fichier
char AncienMDP[100],NouveauMDP[100],ConfirmeMDP[100],login_temp_replace[100];
int test,test2,user_cat;
HWND groupbox_hDlg3,Radio1,Radio2,combo_3;
UINT temp_forme;
int temp_finish;
int temp_paint;
int k4,j4,choix1;


//Thread
HANDLE hThread2;




//hDlg3
HWND edit_compte,edit_mdp,edit_confirme_mdp,combo_1,edit_compte2;
char compte[255],mdp[255],mdp2[255], compte_temp[255];


//variable globale
int num_error2,num_error3;
char temp_pass[255];
//var glob, proc2
int temp_return_dial2;

BOOL APIENTRY Dialog4Proc(HWND hDlg4,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    UINT Trait;
    CHAR szFile[MAX_PATH]={0};
    HWND radio_couper,radio_coller;
    HWND edit_fichier4,edit_info;
    HWND bouton_parcourir;
    HWND stext_nb;
    static HWND trackbar_1;
    char temp_text[20], extention[10];
    char total[1000];
    char *taille;
    double i2;
    double i3;
    int i4;
   
    OPENFILENAME ofn;
    FILE *fichier;
   
    HDC hDC, hMemDC;
    PAINTSTRUCT ps;
   
    RECT rRect;
    switch (uMsg)
    {
      case WM_INITDIALOG:
         GetWindowRect(hDlg4,&rRect);
         //coté gauche contenu dans int=rRect.left ; haut contenu dans int=rRect.top
         if(choix==0)//premier choix
         {
           MoveWindow(hDlg4,rRect.left,rRect.top,450,350,FALSE);//changement de la taille de la fenêtre en fonction du choix
           SetWindowText(hDlg4, "Decoupage/Recollage de fichier");//changement du titre
         }
         else
         {
           MoveWindow(hDlg4,rRect.left,rRect.top,450,250,FALSE);//changement de la taille de la fenêtre en fonction du choix
           SetWindowText(hDlg4, "Essai");//changement du titre
         }
        
         if(choix==0)
         {
           radio_couper=CreateWindowEx(
                             0,
                             "BUTTON",
                             "Couper",
                             WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_LEFTTEXT,
                             10,
                             10,
                             60,
                             20,
                             hDlg4,
                             (HMENU)ID_RADIO_COUPER,
                             hinstance2,
                             NULL
                             );
                            
           radio_coller=CreateWindowEx(
                             0,
                             "BUTTON",
                             "Coller",
                             WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_LEFTTEXT,
                             100,
                             10,
                             53,
                             20,
                             hDlg4,
                             (HMENU)ID_RADIO_COLLER,
                             hinstance2,
                             NULL
                             );
                            
           edit_fichier4 = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                                        "EDIT",
                                "",
                                        WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_NOHIDESEL|WS_TABSTOP,
                                        55,
                                       45,
                                 250,
                                25,
                                  hDlg4,
                                      (HMENU)ID_EDIT_FICHIER4,
                                   hinstance2,
                                  NULL);
                                 
           bouton_parcourir = CreateWindowEx(0,
                                            "BUTTON",
                                            "Parcourir",
                                            WS_VISIBLE|WS_CHILD|WS_TABSTOP,
                                            55+200+60,
                                            45,
                                            80,
                                            25,
                                            hDlg4,
                                            (HMENU)ID_BOUTON_PARCOURIR,
                                            hinstance2,
                                            NULL);
                                           
           trackbar_1 = CreateWindowEx(        0,                             // no extended styles
                                            TRACKBAR_CLASS,                // class name
                                            "Trackbar Control",            // title (caption)
                                            WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS,  // style
                                            10,
                                            150+100,                        // position
                                            200,
                                            30,                       // size
                                            hDlg4,                       // parent window
                                            (HMENU)ID_TRACKBAR,             // control identifier
                                            hinstance2,                       // instance
                                            NULL                          
                                            );
                                           
           stext_nb = CreateWindowEx(0,
                                            "STATIC",
                                            "essai",
                                            WS_VISIBLE|WS_CHILD,
                                            215+105,
                                            155+100,
                                            80,
                                            25,
                                            hDlg4,
                                            (HMENU)ID_STEXT_NB,
                                            hinstance2,
                                            NULL);
          
           edit_info = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                                        "EDIT",
                                "",
                                        WS_VISIBLE|WS_CHILD|ES_NOHIDESEL|ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN|ES_READONLY|ES_OEMCONVERT,
                                        10,
                                       105,
                                 425,
                                80,
                                  hDlg4,
                                      (HMENU)ID_EDIT_INFO,
                                   hinstance2,
                                  NULL);
                                 
           combo_3 = CreateWindowEx(0,
                                          "COMBOBOX",
                                          NULL,
                                          WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,
                                          215,
                                          155+125,
                                          130,
                                          200,
                                          hDlg4,
                                          (HMENU)ID_COMBO_3,
                                          hinstance2,
                                          NULL);
          
           SendMessage(combo_3, CB_ADDSTRING, 0, (LPARAM)"octets [o]");
           SendMessage(combo_3, CB_ADDSTRING, 0, (LPARAM)"kilooctets [ko]");
           SendMessage(combo_3, CB_ADDSTRING, 0, (LPARAM)"Megaoctets [Mo]");
           SendMessage(combo_3, CB_ADDSTRING, 0, (LPARAM)"Gigaoctets [Go]");
           SendMessage(combo_3, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendDlgItemMessage(hDlg4, ID_COMBO_3, CB_SETCURSEL, 1, 0);
                                       
           SendMessage(radio_couper, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(radio_coller, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(edit_fichier4, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(bouton_parcourir, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(trackbar_1, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(stext_nb, WM_SETFONT, (WPARAM)font_normal, MAKELPARAM(TRUE, 0));
           SendMessage(edit_info, WM_SETFONT, (WPARAM)font_petit, MAKELPARAM(TRUE, 0));
        
           Trait=1;
           SetDlgItemInt(hDlg4, ID_STEXT_NB, Trait, FALSE);
                  
           SendMessage(trackbar_1, TBM_SETRANGE,FALSE, MAKELONG(1, 10));
           SendMessage(trackbar_1, TBM_SETPOS,TRUE, Trait);
           SendMessage(hDlg4, WM_HSCROLL, 0, 0);
        
           CheckDlgButton(hDlg4,ID_RADIO_COUPER,BST_CHECKED);
         }
        
         return FALSE;
     
      case WM_HSCROLL:
         SetDlgItemInt(hDlg4, ID_STEXT_NB, SendMessage(trackbar_1, TBM_GETPOS, 0, 0), FALSE);
         char_clean(temp_text);
         GetDlgItemText(hDlg4,ID_STEXT_NB,temp_text,9999);
        
         i4=strlen(temp_text);
         temp_text[i4]=' ';
         temp_text[i4+1]='k';
         temp_text[i4+2]='o';
         temp_text[i4+3]='\0';


         SetDlgItemText(hDlg4,ID_STEXT_NB,temp_text);
      return TRUE;
     
      case WM_PAINT:
           
             hDC = BeginPaint(hDlg4, & ps); //debut de dessin
            
             SetBkMode(hDC, TRANSPARENT); //defini comme semi-transparent
             SelectObject(hDC, font_normal); //application de la police d'ecriture
            
             //AFFICHAGE DU TEXTE SUR LA FENÊTRE DE LOGIN
             if(choix==0)
             {
               TextOut(hDC, 10, 50, "Fichier", strlen("Fichier")); //affichage de login
               TextOut(hDC, 10, 50+35, "Informations Fichier", strlen("Informations Fichier"));
               TextOut(hDC, 215, 155+100, "Taille des parties:", strlen("Taille des parties:"));
             }          
                         
             DeleteDC(hMemDC); //suppression de la mémoire de dessin
             EndPaint(hDlg4, & ps); //fin de dessin


             break;  
        
      case WM_COMMAND:
        
         if (LOWORD(wParam) == ID_COMBO_3)
         {
           if(HIWORD(wParam) == CBN_SELCHANGE)
           {
              choix1 = SendDlgItemMessage(hDlg4, ID_COMBO_3, CB_GETCURSEL, 0, 0);
              switch(choix1)
              {
                case 0:
                     //octets
                     SetDlgItemInt(hDlg4, ID_STEXT_NB, SendMessage(trackbar_1, TBM_GETPOS, 0, 0), FALSE);
                     char_clean(temp_text);
                     GetDlgItemText(hDlg4,ID_STEXT_NB,temp_text,9999);
        
                     i4=strlen(temp_text);
                     temp_text[i4]=' ';
                     temp_text[i4+1]='o';
                     temp_text[i4+2]='\0';


                     SetDlgItemText(hDlg4,ID_STEXT_NB,temp_text);
                     break;
               
                case 1:
                     //ko
                     /*SetDlgItemInt(hDlg4, ID_STEXT_NB, SendMessage(trackbar_1, TBM_GETPOS, 0, 0), FALSE);
                     char_clean(temp_text);
                     GetDlgItemText(hDlg4,ID_STEXT_NB,temp_text,9999);
        
                     i4=strlen(temp_text);
                     temp_text[i4]=' ';
                     temp_text[i4+1]='o';
                     temp_text[i4+2]='k';
                     temp_text[i4+3]='\0';


                     SetDlgItemText(hDlg4,ID_STEXT_NB,temp_text);*/
                    
        
                     break;
                    
                case 2:
                     //Mo


                     break;
               
                case 3:
                     //Go
                    
                     break;
              }
           }
         }
        
         if(LOWORD(wParam) == IDCANCEL)
         {
           EndDialog(hDlg4,0);
           return TRUE;
         }
                  if(LOWORD(wParam) ID_BOUTON_PARCOURIR && (HIWORD(wParam) BN_CLICKED))
         {               
                ZeroMemory(&ofn, sizeof(OPENFILENAME));
                ofn.lStructSize = sizeof(OPENFILENAME);
                ofn.hwndOwner = hDlg4;
                ofn.lpstrFile = szFile;
                ofn.nMaxFile = MAX_PATH;
                //ofn.lpstrFilter ="Fichier source C\0*.c\0Fichier source CPP\0*.cpp\0Tous les fichiers\0*.*\0";
                ofn.lpstrFilter ="Tous les fichiers\0*.*\0";
                ofn.nFilterIndex = 1;
                ofn.lpstrTitle="Parcourir";
                ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
                ofn.lpstrInitialDir=NULL;


                if (GetOpenFileName(&ofn)==TRUE)
                {
                    SendMessage(edit_fichier4, WM_SETTEXT, 0, (LPARAM)szFile);
                    SetDlgItemText(hDlg4, ID_EDIT_FICHIER4, "");
                    SetDlgItemText(hDlg4, ID_EDIT_FICHIER4, szFile);
                    if(IsDlgButtonChecked(hDlg4,ID_RADIO_COUPER)==BST_CHECKED)
                    {
                      //Couper
                      EnableWindow(GetDlgItem(hDlg4,ID_RADIO_COLLER),FALSE);
                    
                      //#####################
                    
                      char_clean(total);
                      strcpy(total,"Nom et Chemin: ");
                      strcat(total,ofn.lpstrFile);
                      strcat(total,"\r\n");
                      strcat(total,"Taille du Fichier: ");
                     
                      fichier = fopen(szFile,"rb");
                      i4=0;
                      fseek(fichier, 0, SEEK_END);
                      i2=ftell(fichier);
                      fclose(fichier);
                      itoa((long)i2,taille,10);
                      strcat(total,taille);
                      strcat(total," octets");                     
                      strcat(total,"\r\n");
                     
                      i3=i2/1024;//i3 contient la taille en ko pas arrondis
 
                      char_clean(taille);
                      sprintf(taille,"%.2lf",i3);
                      strcat(total,"Taille du Fichier en unités choisies: ");
                      strcat(total,taille);
                      strcat(total," ko");
                      strcat(total,"\r\n");
                      strcat(total,"Extention du fichier: ");
                      char_clean(extention);


                      i4=strlen(szFile);
                     
                      char_clean(extention);
                      i4=strlen(szFile);


                      while(szFile[i4]!='.')
                      {
                        i4--;
                      }
                      i4++;
                      k4=0;
                      for(j4=i4;j4<strlen(szFile);j4++)
                      {
                        extention[k4]=szFile[j4];
                        k4++;
                      }
                      strlwr(extention);
                      strcat(total,extention);                     
                      SetDlgItemText(hDlg4, ID_EDIT_INFO, total);
                     
                    }
                    else
                    {
                      //Coller
                      EnableWindow(GetDlgItem(hDlg4,ID_RADIO_COUPER),FALSE);
                    }
                   
                }
                else
                {
                  //erreur
                }
         }
        
         return TRUE;
        
      default:
         return FALSE;
    }
}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2007 à 00:51
DeleteDC(hMemDC);
pas vu alloué avant.


itoa((long)i2,taille,10);
pas vu où pointe *taille.


Le reste une autre fois.

ciao...
BruNews, MVP VC++
0
by_rabbit_08 Messages postés 109 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 15 mai 2007 1
14 mai 2007 à 17:41
Putain mais MECC ^^
j'arrive pas à l croire! Je crois que c'est le itoa qui fait tout planter, mais de façon trop bizar :S
Heureusement que tu me l'as dis, j'aurais jamais pensé à aller voir!
Je reconfirme, mais merci en tout cas, d'y avoir jeter un coup d'oeil, et à ceux qui m'ont aidé!
a+
0
Rejoignez-nous