Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
Jusqu'à présent il me semblait que malloc ou calloc allaient de pairs
avec realloc. C'est donc indispensable d'avoir résever un pointeur
pour faire appel à realloc peu importe la manière (soit un pointeur
vers zero ou nulle soit avec malloc) ?
Les premiers chapitres des cours trouvés sur le net qui portent sur
malloc et la mémoire dynamique ne font qu'expliquer que réserver de la
mémoire avec malloc ne se fait qu'en cours d'exécution et non de
compilation. Pour des petits programmes qui nécessitent peu de temps
de compilation, malloc n'est pas indispensable? Car ces cours
présentent malloc juste comme une déclaration. Je ne vois pas de
différence avec la déclaration statique d'un tableau (pour un petit
programme).
Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
Jusqu'à présent il me semblait que malloc ou calloc allaient de pairs
avec realloc. C'est donc indispensable d'avoir résever un pointeur
pour faire appel à realloc peu importe la manière (soit un pointeur
vers zero ou nulle soit avec malloc) ?
Les premiers chapitres des cours trouvés sur le net qui portent sur
malloc et la mémoire dynamique ne font qu'expliquer que réserver de la
mémoire avec malloc ne se fait qu'en cours d'exécution et non de
compilation. Pour des petits programmes qui nécessitent peu de temps
de compilation, malloc n'est pas indispensable? Car ces cours
présentent malloc juste comme une déclaration. Je ne vois pas de
différence avec la déclaration statique d'un tableau (pour un petit
programme).
Non, je parle d'efficacite au sens algorithmique.
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
Jusqu'à présent il me semblait que malloc ou calloc allaient de pairs
avec realloc. C'est donc indispensable d'avoir résever un pointeur
pour faire appel à realloc peu importe la manière (soit un pointeur
vers zero ou nulle soit avec malloc) ?
Les premiers chapitres des cours trouvés sur le net qui portent sur
malloc et la mémoire dynamique ne font qu'expliquer que réserver de la
mémoire avec malloc ne se fait qu'en cours d'exécution et non de
compilation. Pour des petits programmes qui nécessitent peu de temps
de compilation, malloc n'est pas indispensable? Car ces cours
présentent malloc juste comme une déclaration. Je ne vois pas de
différence avec la déclaration statique d'un tableau (pour un petit
programme).
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
int *numbers = NULL ;
char *chaine = 0 ;
C'est identique?
Sans trop savoir, ça revient à réserver un espace mémoire pour un
pointeur?
Ca reviendrait à faire appel à malloc sauf que la quantité de mémoire
est nulle ? (à ce niveau, je ne maîtrise pas très bien mes questions
pour ce chapitre).
En comparaison au code plus haut dans ce post, je ne vois aucun "gros"
avantage à faire appel au code de son exemple. Je peux comprendre plus
tard que si on lit un fichier deplusieurs milliers de lignes malloc
est utile mais pour la saisie de quelques données, j'en conclu que le
code plus haut est le seul qui convient et est à la fois souple et
simple ce qui rend le code de son exemple pas très utile malgré le
fait que cet exemple est celui de nombreux cours...
En comparaison au code plus haut dans ce post, je ne vois aucun "gros"
avantage à faire appel au code de son exemple. Je peux comprendre plus
tard que si on lit un fichier deplusieurs milliers de lignes malloc
est utile mais pour la saisie de quelques données, j'en conclu que le
code plus haut est le seul qui convient et est à la fois souple et
simple ce qui rend le code de son exemple pas très utile malgré le
fait que cet exemple est celui de nombreux cours...
En comparaison au code plus haut dans ce post, je ne vois aucun "gros"
avantage à faire appel au code de son exemple. Je peux comprendre plus
tard que si on lit un fichier deplusieurs milliers de lignes malloc
est utile mais pour la saisie de quelques données, j'en conclu que le
code plus haut est le seul qui convient et est à la fois souple et
simple ce qui rend le code de son exemple pas très utile malgré le
fait que cet exemple est celui de nombreux cours...
On prefere le 2e schema dans l'enorme majorite des applications. Sur la
plupart des OS, le plus souvent, il n'y a "pas de place" apres ton tableau,
et realloc revient donc a allouer un nouveau tableau et tout copier...
On prefere le 2e schema dans l'enorme majorite des applications. Sur la
plupart des OS, le plus souvent, il n'y a "pas de place" apres ton tableau,
et realloc revient donc a allouer un nouveau tableau et tout copier...
On prefere le 2e schema dans l'enorme majorite des applications. Sur la
plupart des OS, le plus souvent, il n'y a "pas de place" apres ton tableau,
et realloc revient donc a allouer un nouveau tableau et tout copier...
En fait, j'aurais dû commencer dès le départ par ce post:
je me demande à quoi peut servir le code ci-dessous, également tiré
d'un chapitre sur l'allocation dynamique.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations */
char INTRO[500];
char *TEXTE[10];
int I;
/* Traitement */
for (I=0; I<10; I++)
{
fgets(INTRO, 500, stdin) ; /* (maj) dans le code original
c'était gets(INTRO) */
/* Réservation de la mémoire */
TEXTE[I] = malloc(strlen(INTRO)+1);
/* S'il y a assez de mémoire, ... */
if (TEXTE[I])
/* copier la phrase à l'adresse */
/* fournie par malloc, ... */
strcpy(TEXTE[I], INTRO);
else
{
/* sinon quitter le programme */
/* après un message d'erreur. */
printf("ERREUR: Pas assez de mémoire n");
exit(-1);
}
}
return 0;
}
Est-ce que l'auteur n'a pas oublié free(TEXTE) ?
En fait, je me demande pourquoi char *TEXTE[10] au lieu de char *TEXTE
Est-ce qu'on peut procéder avec :
char* TEXTE = 0 ;
comme plus haut?
En fait, j'aurais dû commencer dès le départ par ce post:
je me demande à quoi peut servir le code ci-dessous, également tiré
d'un chapitre sur l'allocation dynamique.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations */
char INTRO[500];
char *TEXTE[10];
int I;
/* Traitement */
for (I=0; I<10; I++)
{
fgets(INTRO, 500, stdin) ; /* (maj) dans le code original
c'était gets(INTRO) */
/* Réservation de la mémoire */
TEXTE[I] = malloc(strlen(INTRO)+1);
/* S'il y a assez de mémoire, ... */
if (TEXTE[I])
/* copier la phrase à l'adresse */
/* fournie par malloc, ... */
strcpy(TEXTE[I], INTRO);
else
{
/* sinon quitter le programme */
/* après un message d'erreur. */
printf("ERREUR: Pas assez de mémoire n");
exit(-1);
}
}
return 0;
}
Est-ce que l'auteur n'a pas oublié free(TEXTE) ?
En fait, je me demande pourquoi char *TEXTE[10] au lieu de char *TEXTE
Est-ce qu'on peut procéder avec :
char* TEXTE = 0 ;
comme plus haut?
En fait, j'aurais dû commencer dès le départ par ce post:
je me demande à quoi peut servir le code ci-dessous, également tiré
d'un chapitre sur l'allocation dynamique.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations */
char INTRO[500];
char *TEXTE[10];
int I;
/* Traitement */
for (I=0; I<10; I++)
{
fgets(INTRO, 500, stdin) ; /* (maj) dans le code original
c'était gets(INTRO) */
/* Réservation de la mémoire */
TEXTE[I] = malloc(strlen(INTRO)+1);
/* S'il y a assez de mémoire, ... */
if (TEXTE[I])
/* copier la phrase à l'adresse */
/* fournie par malloc, ... */
strcpy(TEXTE[I], INTRO);
else
{
/* sinon quitter le programme */
/* après un message d'erreur. */
printf("ERREUR: Pas assez de mémoire n");
exit(-1);
}
}
return 0;
}
Est-ce que l'auteur n'a pas oublié free(TEXTE) ?
En fait, je me demande pourquoi char *TEXTE[10] au lieu de char *TEXTE
Est-ce qu'on peut procéder avec :
char* TEXTE = 0 ;
comme plus haut?
Comme je découvre quelque chose de nouveau, je voudrais comprendre
comment je faisais avant:
je viens de me rendre compte que fgets pouvait agir comme realloc :
Ex :
char Txt[5] ;
printf("nEntrez une phrase : n") ;
fgets(Txt, 10, stdin) ;
Je comprends qu'il n'y a rien de dynamique dans le sens ou pour ce
bout de code, toutes les instructions, déclarations sont compilées et
rien ne se produit pendant l'exécution... Mais c'est équivalent à
realloc dans le résultat même si ça ne va pas dans la mémoire pile
'stack).
c'est la bonne différence que je comprends.
Comme je découvre quelque chose de nouveau, je voudrais comprendre
comment je faisais avant:
je viens de me rendre compte que fgets pouvait agir comme realloc :
Ex :
char Txt[5] ;
printf("nEntrez une phrase : n") ;
fgets(Txt, 10, stdin) ;
Je comprends qu'il n'y a rien de dynamique dans le sens ou pour ce
bout de code, toutes les instructions, déclarations sont compilées et
rien ne se produit pendant l'exécution... Mais c'est équivalent à
realloc dans le résultat même si ça ne va pas dans la mémoire pile
'stack).
c'est la bonne différence que je comprends.
Comme je découvre quelque chose de nouveau, je voudrais comprendre
comment je faisais avant:
je viens de me rendre compte que fgets pouvait agir comme realloc :
Ex :
char Txt[5] ;
printf("nEntrez une phrase : n") ;
fgets(Txt, 10, stdin) ;
Je comprends qu'il n'y a rien de dynamique dans le sens ou pour ce
bout de code, toutes les instructions, déclarations sont compilées et
rien ne se produit pendant l'exécution... Mais c'est équivalent à
realloc dans le résultat même si ça ne va pas dans la mémoire pile
'stack).
c'est la bonne différence que je comprends.