Newbie : 2 questions (structures et getch() ) : Merci :)

Newbie : 2 questions (structures et getch() ) : Merci :) - C++ - Programmation

Marsh Posté le 08-04-2003 à 23:42:53    

salut tlm,
 
je commence l'apprentissage du C est j'ai petit controle demain (je sais c'est ptet un peu tard  :D ) mais j'ai 2 questions:
 
1)getch() en fin de programme sert simplement a faire une pause jusqu'a ce que l'utilisateur tape sur une touche? est ce different de getchar()? (la pause ne fonctionne qu'avec getch()..)
 
2) Pour la définition d'un structure, du genre
 
struct personne { char nom[30];
                      char prenom[20];
                      float heures[31];
                      };
 
Si j'ai bien compris le [30] derriere "nom" signifie que mon nom poura faire au max 30 caractères? Mon prof m'a parlé du fait qu'on pouvait definir la structure en faisant comme suit (ce qui permettait d'avoir un nombre illimité de caractere et de ne pas manger de la memoire pour rien):
 
struct personne { char *nom;
                  char *prenom;
                  float heures[31];
                 };
 
Mais comment je rentre une valeur pour personne.nom ensuite? (j'ai du mal avec les pointeurs ;)
 
Merci pour vos réponses !


Message édité par dionaea le 08-04-2003 à 23:52:48
Reply

Marsh Posté le 08-04-2003 à 23:42:53   

Reply

Marsh Posté le 08-04-2003 à 23:58:59    

S'il vous plait  :cry:

Reply

Marsh Posté le 09-04-2003 à 00:19:28    

dionaea a écrit :

salut tlm,
 
je commence l'apprentissage du C est j'ai petit controle demain (je sais c'est ptet un peu tard  :D ) mais j'ai 2 questions:
 
1)getch() en fin de programme sert simplement a faire une pause jusqu'a ce que l'utilisateur tape sur une touche? est ce different de getchar()? (la pause ne fonctionne qu'avec getch()..)
 
getchar() doit marcher aussi, suffit de mettre un  
rewind(stdin);
et un  
fflush(stdin);
avant...
 
De plus getch() est pas standard, faut inclure conio.h, typiquement dos, pas top quoi...

 
2) Pour la définition d'un structure, du genre
 
struct personne { char nom[30];
                      char prenom[20];
                      float heures[31];
                      };
 
Si j'ai bien compris le [30] derriere "nom" signifie que mon nom poura faire au max 30 caractères? Mon prof m'a parlé du  
 
correct... Enfin 29 caracteres pour etre precis. Le derneir etant obligatoirement '\0'
 
fait qu'on pouvait definir la structure en faisant comme suit (ce qui permettait d'avoir un nombre illimité de caractere et de ne pas manger de la memoire pour rien):
 
struct personne { char *nom;
                  char *prenom;
                  float heures[31];
                 };
 
Mais comment je rentre une valeur pour personne.nom ensuite? (j'ai du mal avec les pointeurs ;)
 
Avec calloc ou malloc et memset, puis strncpy
 
Merci pour vos réponses !


Message édité par ToxicAvenger le 09-04-2003 à 00:28:54
Reply

Marsh Posté le 09-04-2003 à 00:41:46    

Voila un exemple (volontairement non fini):
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct
  5. {
  6. char *nom;
  7.     char *prenom;
  8.     float heures[31];
  9. } personne;
  10. #define TAILLE 512
  11. /* Test si l'allocation mémoire a reussi ou non */
  12. void TestAllocationMemoire(void* vVariableATester)
  13. {
  14. if (vVariableATester == NULL)
  15. {
  16.  puts ("Allocation mémoire impossible !" );
  17.  exit(EXIT_FAILURE);
  18. }
  19. }
  20. /* Fonction permettant de faire une pause */
  21. void pause()
  22. {
  23. puts ("Appuyer sur une touche pour continuer..." );
  24. fflush(stdin);
  25. rewind(stdin);
  26. getchar();
  27. }
  28. int main(void)
  29. {
  30. personne pEntree;
  31. char *strTmp = NULL;
  32. /* Préparation de la variable tampon */
  33. strTmp = malloc(TAILLE);
  34. TestAllocationMemoire(strTmp);
  35. memset(strTmp, 0, TAILLE);
  36. /* Saisie du nom */
  37. puts("Entree un nom: " );
  38. fgets(strTmp, 512, stdin);
  39. pEntree.nom = malloc(strlen(strTmp));
  40. TestAllocationMemoire(pEntree.nom);
  41. memset(pEntree.nom, 0, strlen(strTmp));
  42. strncpy(pEntree.nom, strTmp, strlen(strTmp) - 1);
  43. /* Saisie du prenom */
  44. /* Saisie du tableau de float */
  45. pEntree.heures[0] = 0.0;
  46. /* On libère la mémoire temporaire*/
  47. free(strTmp);
  48. /* Verification a l'ecran : */
  49. printf("%s %s %f\n", pEntree.nom, "pEntree.prenom", pEntree.heures[0]);
  50. /* Pause avant de quitter*/
  51. pause();
  52. return EXIT_SUCCESS;
  53. }


 
Edit: si tu as des questions, on se fera un plaisir d'y repondre. Je pense que ce code est suffisament bien écrit pour que tu puisses le finir pour t'entrainer.
 
 :jap:


Message édité par ToxicAvenger le 09-04-2003 à 00:44:13
Reply

Marsh Posté le 09-04-2003 à 07:34:28    

Merci, je vais voir ça, mais il ne me semble pas avoir vu "malloc" pour les structures...
Merci pour cette réponse !  :hello:

Reply

Marsh Posté le 09-04-2003 à 11:02:55    

dionaea a écrit :

Merci, je vais voir ça, mais il ne me semble pas avoir vu "malloc" pour les structures...
Merci pour cette réponse !  :hello:  


 
ben si tu as un char*, faut forcément un malloc/calloc derriere pour allouer la mémoire qu'il faut...

Reply

Marsh Posté le 09-04-2003 à 11:31:57    

ToxicAvenger a écrit :


 
ben si tu as un char*, faut forcément un malloc/calloc derriere pour allouer la mémoire qu'il faut...


oue sinon c est segv direct :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 09-04-2003 à 13:04:13    

ToxicAvenger a écrit :


 
(......)
 

Code :
  1. /* Fonction permettant de faire une pause */
  2. void pause()
  3. {
  4. puts ("Appuyer sur une touche pour continuer..." );
  5. fflush(stdin);
  6. rewind(stdin);
  7. getchar();
  8. }


 
(......)


 
:non:
 
pas de fflush(stdin) !
et rewind(stdin), tu peux donner le sens que ca a sur des entrées au clavier, stp ?

Reply

Marsh Posté le 09-04-2003 à 13:22:53    

theShOcKwAvE a écrit :


 
:non:
 
pas de fflush(stdin) !
et rewind(stdin), tu peux donner le sens que ca a sur des entrées au clavier, stp ?


 
Oui, mais ...
 

La fonction fflush() a un comportement défini uniquement sur les flux ouverts en écriture tels que stdout. Il est possible que sur votre système, appliquer cette fonction à stdin soit possible, mais c'est alors une extension non standard. Le comportement est indéterminé, et imprévisible.


 
Etant donné qu'il est sous windows, et qu'il programme une application console, ca pourra lui éviter des prises de tetes.
 
Sinon, effcetivement, il ne faut pas en faire, mais je n'avais pas envie de lui prendre la tête avec ca.
 
C'est discutable, on en convient, mais c'est un parti pris de ma part.
 
De plus, etant donné que j'ai mis cette fonction à part, c'est pour qu'il la remplace par un truc plus *standard* en fonction de son systeme. De toutes facons, au mieux ca sera posix, au pire ca sera dépendant de son os et/ou de son compilo.


Message édité par ToxicAvenger le 09-04-2003 à 13:23:26
Reply

Marsh Posté le 09-04-2003 à 18:50:46    

Bon ça y est j'ai passé mon controle  :)  
C'etait pas bien dur (on commence le C) mais il nous a posé un exo dont voici l'enoncé:
 
"Ecrire un prg qui demande a l'utilisateur de rentrer 10 entiers. Les entiers seront stockés dans une zone memoire allouée dynamiquement (fonction malloc()) pouvant contenir 10 entiers. A l'issue de la saisie, le prg affiche les 10 valeurs."
 
J'y ai touché un peu mais je me souvenais pas avoir vu malloc()...
Pourriez m'éclairer?

Reply

Marsh Posté le 09-04-2003 à 18:50:46   

Reply

Marsh Posté le 09-04-2003 à 18:55:54    

dionaea a écrit :

Bon ça y est j'ai passé mon controle  :)  
C'etait pas bien dur (on commence le C) mais il nous a posé un exo dont voici l'enoncé:
 
"Ecrire un prg qui demande a l'utilisateur de rentrer 10 entiers. Les entiers seront stockés dans une zone memoire allouée dynamiquement (fonction malloc()) pouvant contenir 10 entiers. A l'issue de la saisie, le prg affiche les 10 valeurs."
 
J'y ai touché un peu mais je me souvenais pas avoir vu malloc()...
Pourriez m'éclairer?


 
y'en a pour 5 minutes a faire, a tout de suite :)

Reply

Marsh Posté le 09-04-2003 à 19:17:26    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NOMBRE 10
  4. int main(void)
  5. {
  6. int i = 0;
  7. int *piSaisie = NULL;
  8. /* Allocation */
  9. piSaisie = malloc(NOMBRE * sizeof(int));
  10. if (piSaisie == NULL)
  11. {
  12.  puts ("Allocation mémoire impossible !" );
  13.  exit(0);
  14. }
  15. memset(piSaisie, 0, NOMBRE * sizeof(int));
  16. /* Saisie */
  17. while (i < NOMBRE)
  18. {
  19.  printf("Entrer le chiffre n° %d: ", i++);
  20.  scanf("%d", &piSaisie);
  21.  piSaisie++;
  22. }
  23. /* Affichage */
  24. piSaisie--;
  25. i--;
  26. while (i >= 0)
  27. {
  28.  printf("chiffre n° %d = %d \n", i--, piSaisie);
  29.  piSaisie--;
  30. }
  31. return EXIT_SUCCESS;
  32. }


 
y'a une couille dans le potage  :sol:  
 
je regarde ca.

Reply

Marsh Posté le 09-04-2003 à 19:25:19    

:heink:  
Oula...J'aurai été incapable de faire ça!

Reply

Marsh Posté le 09-04-2003 à 19:26:08    

dionaea a écrit :

:heink:  
Oula...J'aurai été incapable de faire ça!


 
ben en taille, c court. Evidemment si tu n'as pas vu malloc et les pointeurs. La par exemple, ca doit couiller au niveau de l'arithmétique des pointeurs...
 
Edit: memset c'est pas obligatoire, ca permet de mettre un bout de mémoire à une certaine valeure (dans mon cas: à 0)


Message édité par ToxicAvenger le 09-04-2003 à 19:26:59
Reply

Marsh Posté le 09-04-2003 à 19:27:19    

ToxicAvenger a écrit :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NOMBRE 10
  4. int main(void)
  5. {
  6. int i = 0;
  7. int *piSaisie = NULL;
  8. /* Allocation */
  9. piSaisie = malloc(NOMBRE * sizeof(int));
  10. if (piSaisie == NULL)
  11. {
  12.  puts ("Allocation mémoire impossible !" );
  13.  exit(0);
  14. }
  15. memset(piSaisie, 0, NOMBRE * sizeof(int));
  16. /* Saisie */
  17. while (i < NOMBRE)
  18. {
  19.  printf("Entrer le chiffre n° %d: ", i++);
  20.  scanf("%d", &piSaisie);
  21.  piSaisie++;
  22. }
  23. /* Affichage */
  24. piSaisie--;
  25. i--;
  26. while (i >= 0)
  27. {
  28.  printf("chiffre n° %d = %d \n", i--, *piSaisie); <--------------------------
  29.  piSaisie--;
  30. }
  31. return EXIT_SUCCESS;
  32. }


 
y'a une couille dans le potage  :sol:  
 
je regarde ca.


Message édité par Tomate le 09-04-2003 à 19:27:42

---------------
:: Light is Right ::
Reply

Marsh Posté le 09-04-2003 à 19:31:30    

tomate77: non c pas ca... (enfin aussi mais ca vient pas de la)
 
c'est au niveau de piSaisie++; et piSaisie--;

Reply

Marsh Posté le 09-04-2003 à 19:36:28    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NOMBRE 10
  4. int main(void)
  5. {
  6. int i = 0;
  7. int *piSaisie = NULL;
  8. // Allocation  
  9. piSaisie = malloc(NOMBRE * sizeof(int));
  10. if (piSaisie == NULL)
  11. {
  12.  puts ("Allocation mémoire impossible !" );
  13.  exit(0);
  14. }
  15. //memset(piSaisie, 0, NOMBRE * sizeof(int));
  16. // Saisie  
  17. for (i=0; i<NOMBRE; i++)
  18. {
  19.  printf("Entrer le chiffre n° %d: ", i);
  20.  scanf("%d", piSaisie+i);
  21. }
  22. // Affichage  
  23. for (i=0; i<NOMBRE; i++)
  24. {
  25.  printf("chiffre n° %d = %d \n", i, piSaisie[i]);
  26. }
  27. free(piSaisie);
  28. return EXIT_SUCCESS;
  29. }


 
Voila.
 
Edit: voila, ca ca marche !


Message édité par ToxicAvenger le 10-04-2003 à 10:37:31
Reply

Marsh Posté le 09-04-2003 à 22:59:46    

pourquoi tu fais pas directement un calloc, si c'est pour faire un memset à 0 .....

Reply

Marsh Posté le 09-04-2003 à 23:06:30    

De plus, le While en connaissant le nombre d'itérations, je ne suis pas sur que ca plaise trop aux profs ...
 
un bon 'for' leur ferait sans doute plus plaisir ....


Message édité par theshockwave le 09-04-2003 à 23:07:40
Reply

Marsh Posté le 09-04-2003 à 23:58:13    

theShOcKwAvE a écrit :

pourquoi tu fais pas directement un calloc, si c'est pour faire un memset à 0 .....


 
et pourquoi pas ?  :sol:

Reply

Marsh Posté le 09-04-2003 à 23:58:32    

theShOcKwAvE a écrit :

De plus, le While en connaissant le nombre d'itérations, je ne suis pas sur que ca plaise trop aux profs ...
 
un bon 'for' leur ferait sans doute plus plaisir ....


 
tous les chemins mènent à Rome. :o

Reply

Marsh Posté le 10-04-2003 à 09:22:04    

ToxicAvenger a écrit :


 
tous les chemins mènent à Rome. :o  

:jap:  
 
un for ou un while, on s en tappe du moment ke ca marche :heink:


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:05:37    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. int* tab_int;
  6. tab_int = (int*)malloc(10);
  7. if (tab_int == NULL)
  8. {
  9. printf("Allocation mémoire impossible !" );
  10. exit(0);
  11. }
  12. printf("Saisie des nombres :" );
  13. for (int i=0; i<10;i++)
  14. {
  15. printf("Entrez le nombre %d : ", i+1);
  16. scanf("%d", tab_int+i);
  17. }
  18. printf("Affichage des nombres :" );
  19. for (i=0; i<10;i++)
  20. printf("Voici le nombre %d : %d", i+1, tab_int[i]);
  21. free (tab_int);
  22. return EXIT_SUCCESS;
  23. }


 
ca me semble un peu plus simple  :whistle:


Message édité par polo021 le 10-04-2003 à 10:06:48
Reply

Marsh Posté le 10-04-2003 à 10:07:55    

polo021 a écrit :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. int* tab_int;
  6. tab_int = (int*)malloc(10);
  7. if (tab_int == NULL)
  8. {
  9. printf("Allocation mémoire impossible !" );
  10. exit(0);
  11. }
  12. printf("Saisie des nombres :" );
  13. for (int i=0; i<10;i++)
  14. {
  15. printf("Entrez le nombre %d : ", i+1);
  16. scanf("%d", tab_int+i);
  17. }
  18. printf("Affichage des nombres :" );
  19. for (i=0; i<10;i++)
  20. printf("Voici le nombre %d : %d", i+1, tab_int[i]);
  21. free (tab_int);
  22. return EXIT_SUCCESS;
  23. }


 
ca me semble un peu plus simple  :whistle:


toutafait :hello:


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:12:19    

polo021 a écrit :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. int* tab_int;
  6. tab_int = (int*)malloc(10);
  7. if (tab_int == NULL)
  8. {
  9. printf("Allocation mémoire impossible !" );
  10. exit(0);
  11. }
  12. printf("Saisie des nombres :" );
  13. for (int i=0; i<10;i++)
  14. {
  15. printf("Entrez le nombre %d : ", i+1);
  16. scanf("%d", tab_int+i);
  17. }
  18. printf("Affichage des nombres :" );
  19. for (i=0; i<10;i++)
  20. printf("Voici le nombre %d : %d", i+1, tab_int[i]);
  21. free (tab_int);
  22. return EXIT_SUCCESS;
  23. }


 
ca me semble un peu plus simple  :whistle:


 
 [:toxicavenger] ouais, sauf que c'est pas du C mais du C++ ca...
 
Et en plus ton free plante (normal vu comment tu manipule ca...)


Message édité par ToxicAvenger le 10-04-2003 à 10:24:54
Reply

Marsh Posté le 10-04-2003 à 10:15:22    

ToxicAvenger a écrit :


 
 [:toxicavenger] ouais, sauf que c'est pas du C mais du C++ ca...
 
Et en plus ton free plante (normal vu comment tu manipule ca...)

:??:  
 
 
ps : ON NE CASTE JAMAIS MALLOC :fou:


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:18:36    

tomate77 a écrit :

:??:  
 
 
ps : ON NE CASTE JAMAIS MALLOC :fou:  


 
oui je suis d'accord mais pourquoi me quoter moi ? moi je ne caste pas malloc, c'est polo021 qui fait ca...  :o
 
Edit: c'est du C++ à cause de sa déclaration int i dans son for. En C++ c'est autorisé, pas en C.


Message édité par ToxicAvenger le 10-04-2003 à 10:19:23
Reply

Marsh Posté le 10-04-2003 à 10:22:41    

ToxicAvenger a écrit :


 
oui je suis d'accord mais pourquoi me quoter moi ? moi je ne caste pas malloc, c'est polo021 qui fait ca...  :o
 
Edit: c'est du C++ à cause de sa déclaration int i dans son for. En C++ c'est autorisé, pas en C.


je t ai quote pour :
- c est du C++, alors juste pour une declaration de int ;)
- le free, pk il marcherai po, il n a pas deplace les pointeur :??:
 
voilou :hello:


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:24:08    

tomate77 a écrit :


je t ai quote pour :
- c est du C++, alors juste pour une declaration de int ;)
- le free, pk il marcherai po, il n a pas deplace les pointeur :??:
 
voilou :hello:  


 
- ben ca suffit pour pas compiler avec un compilo de C
- chez moi ca plante


Message édité par ToxicAvenger le 10-04-2003 à 10:24:33
Reply

Marsh Posté le 10-04-2003 à 10:25:20    

ToxicAvenger a écrit :


 
- ben ca suffit pour pas compiler avec un compilo de C
- chez moi ca plante


-ok
-tu peux faire un gdb et me dire ou ca plante ?


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:30:43    

tomate77 a écrit :


-ok
-tu peux faire un gdb et me dire ou ca plante ?


 
je suis sous windows, alors gdb...
 
ca plante a la fin, apres l'affichage, attends je regarde sous le debug.

Reply

Marsh Posté le 10-04-2003 à 10:32:22    

ToxicAvenger a écrit :


 
je suis sous windows, alors gdb...
 
ca plante a la fin, apres l'affichage, attends je regarde sous le debug.


ok :D
 
mais deja j aurai fais un malloc(11) et pas 10 ;)
 
edit malloc(11 * sizeof (int)) !!!


Message édité par Tomate le 10-04-2003 à 10:35:10

---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:38:13    

tomate77 a écrit :


ok :D
 
mais deja j aurai fais un malloc(11) et pas 10 ;)
 
edit malloc(11 * sizeof (int)) !!!


 
Bah moi je fais un malloc 10 et ca marche... :??:  
 

Code :
  1. #define NOMBRE 10
  2. int main(void)
  3. {
  4. int i = 0;
  5. int *piSaisie = NULL;
  6. // Allocation  
  7. piSaisie = malloc(NOMBRE * sizeof(int));
  8. if (piSaisie == NULL)
  9. {
  10.  puts ("Allocation mémoire impossible !" );
  11.  exit(0);
  12. }
  13. //memset(piSaisie, 0, NOMBRE * sizeof(int));
  14. // Saisie  
  15. for (i=0; i<NOMBRE; i++)
  16. {
  17.  printf("Entrer le chiffre n° %d: ", i);
  18.  scanf("%d", piSaisie+i);
  19. }
  20. // Affichage  
  21. for (i=0; i<NOMBRE; i++)
  22. {
  23.  printf("chiffre n° %d = %d \n", i, piSaisie[i]);
  24. }
  25. free(piSaisie);
  26. return EXIT_SUCCESS;
  27. }

Reply

Marsh Posté le 10-04-2003 à 10:39:45    

ToxicAvenger a écrit :


 
Bah moi je fais un malloc 10 et ca marche... :??:  
 

Code :
  1. #define NOMBRE 10
  2. int main(void)
  3. {
  4. int i = 0;
  5. int *piSaisie = NULL;
  6. // Allocation  
  7. piSaisie = malloc(NOMBRE * sizeof(int));
  8. if (piSaisie == NULL)
  9. {
  10.  puts ("Allocation mémoire impossible !" );
  11.  exit(0);
  12. }
  13. //memset(piSaisie, 0, NOMBRE * sizeof(int));
  14. // Saisie  
  15. for (i=0; i<NOMBRE; i++)
  16. {
  17.  printf("Entrer le chiffre n° %d: ", i);
  18.  scanf("%d", piSaisie+i);
  19. }
  20. // Affichage  
  21. for (i=0; i<NOMBRE; i++)
  22. {
  23.  printf("chiffre n° %d = %d \n", i, piSaisie[i]);
  24. }
  25. free(piSaisie);
  26. return EXIT_SUCCESS;
  27. }




 
bah ca marche alors ?????


---------------
:: Light is Right ::
Reply

Marsh Posté le 10-04-2003 à 10:43:26    

tomate77 a écrit :


 
bah ca marche alors ?????


 
le mien oui :sol:

Reply

Marsh Posté le 10-04-2003 à 10:47:43    

vous pourriez me dire pourquoi c'est pas bien les casting sur malloc?
 
et le sizeof (int) si je le mets pas c'est a cause du casting (il en deduit lui meme que c'est de l'entier).
 
PS : je n'ai pas teste mais simplement tape ca comme ca en 2 minutes mais je vois pas pourquoi le free planterai???  :??:

Reply

Marsh Posté le 10-04-2003 à 10:50:57    

tomate77 a écrit :


ok :D
 
mais deja j aurai fais un malloc(11) et pas 10 ;)
 
edit malloc(11 * sizeof (int)) !!!


 
pourquoi un malloc 11? on manipule pas des caracteres ici!

Reply

Marsh Posté le 10-04-2003 à 10:53:02    

ToxicAvenger a écrit :


 
le mien oui :sol:  


 
tu veux dire que :  
int *tab = (int*)malloc(10); => plante au free
 
et que :
int *tab = malloc(10*sizeof(int)); => ne plante pas au free?
 :??: c'est quoi ce bordel?


Message édité par polo021 le 10-04-2003 à 10:53:57
Reply

Marsh Posté le 10-04-2003 à 10:57:35    

polo021 a écrit :


 
tu veux dire que :  
int *tab = (int*)malloc(10); => plante au free
 
et que :
int *tab = malloc(10*sizeof(int)); => ne plante pas au free?
 :??: c'est quoi ce bordel?


 
le bordel c'est qu'un int ca fait pas 1 octet...
 
sizeof(int) != 1  :kaola:
 
Edit: du moins la norme dit que ca depent de ta plateforme. Le seul truc que ta norme te certifie, c'est que sizeof(char) == 1 quelque soit ta plateforme.


Message édité par ToxicAvenger le 10-04-2003 à 10:58:31
Reply

Marsh Posté le 10-04-2003 à 10:59:01    

polo021 a écrit :

vous pourriez me dire pourquoi c'est pas bien les casting sur malloc?
 
et le sizeof (int) si je le mets pas c'est a cause du casting (il en deduit lui meme que c'est de l'entier).
 
PS : je n'ai pas teste mais simplement tape ca comme ca en 2 minutes mais je vois pas pourquoi le free planterai???  :??:  


on ne caste jamais malloc car ca renvoie un void * ;)
 
et 10 ca marche ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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