Loading lang_c_qu_06...

enib_small.png LANG-C Qu_06 — Questionnaire sur le chapitre 06_Alloc

{1} Allocation dynamique de mémoire

Vrai ou faux ? Une variable automatique de type tableau int v[ /* ??? */ ] peut avoir une taille quelconque.
 1 ? 


Vrai ou faux ? Une variable automatique de type tableau int v[ /* ??? */ ] est limitée à une taille maximale qui est identique pour toutes les plateformes d'exécution.
 2 ? 


Vrai ou faux ? Une variable automatique de type tableau int v[ /* ??? */ ] est limitée à une taille maximale qui est dépendante de la plateforme d'exécution.
 3 ? 


Vrai ou faux ? Un tableau alloué dynamiquement est limitée à une taille maximale qui est identique pour toutes les plateformes d'exécution.
 4 ? 


Vrai ou faux ? Un tableau alloué dynamiquement est limitée à une taille maximale qui est liée à la quantité de mémoire disponible sur la plateforme d'exécution.
 5 ? 


Vrai ou faux ? L'allocation dynamique a lieu dans la même zone mémoire que les variables automatiques.
 6 ? 


Vrai ou faux ? L'allocation dynamique a lieu dans une zone mémoire différente de celle des variables automatiques.
 7 ? 


Vrai ou faux ? L'allocation dynamique a lieu dans la zone mémoire nommée la pile (stack).
 8 ? 


Vrai ou faux ? L'allocation dynamique a lieu dans la zone mémoire nommée le tas (heap).
 9 ? 


Vrai ou faux ? Lorsqu'une allocation dynamique a lieu dans une fonction, la mémoire en question est automatiquement libérée à la sortie de cette fonction.
 10 ? 


Vrai ou faux ? Lorsqu'une allocation dynamique a lieu dans une fonction, la mémoire en question est automatiquement libérée à la fin du programme.
 11 ? 


Écrire complètement la portion de code qui permet d'obtenir dans une variable nommée p un seul entier alloué dynamiquement.
 12 ? 


Écrire complètement la portion de code qui permet d'obtenir dans une variable nommée p un tableau de 2000 entiers alloué dynamiquement.
 13 ? 


Écrire complètement la portion de code qui permet d'obtenir dans une variable nommée p un seul réel alloué dynamiquement.
 14 ? 


Écrire complètement la portion de code qui permet d'obtenir dans une variable nommée p un tableau de 2000 réels alloué dynamiquement.
 15 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
void *a=malloc(8000);
if(a==NULL)
{
  abort();
}
free(a);
 16 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
void *v=malloc(8000);
if(v==NULL)
{
  abort();
}
int *a=(int *)v;
free(a);
 17 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
int a;
free(&a);
 18 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
int a[100];
free(a);
 19 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
int v[100];
int *a=v;
free(a);
 20 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
void *v=malloc(8000);
if(v==NULL)
{
  abort();
}
int *a=((int *)v)+16;
free(a);
 21 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de free() ?
Si oui, lequel ?
void *v=malloc(8000);
if(v==NULL)
{
  abort();
}
int *a=(int *)v;
free(v);
free(a);
 22 ? 


Écrire complètement la portion de code qui permet de redimensionner un tableau dynamique désigné par une variable nommée p afin qu'il puisse désormais contenir 4000 entiers.
 23 ? 


Écrire complètement la portion de code qui permet de redimensionner un tableau dynamique désigné par une variable nommée p afin qu'il puisse désormais contenir 4000 réels.
 24 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de realloc() ?
Si oui, lequel ?
int *a=(int *)malloc(8000);
if(a==NULL)
{
  abort();
}
a[16]=5;
a=(int *)realloc(a, 16000);
if(a==NULL)
{
  abort();
}
a[16]+=8;
free(a);
 25 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de realloc() ?
Si oui, lequel ?
int *a=(int *)malloc(8000);
if(a==NULL)
{
  abort();
}
a[16]=5;
realloc(a, 16000);
a[16]+=8;
free(a);
 26 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de realloc() ?
Si oui, lequel ?
int *a=(int *)malloc(8000);
if(a==NULL)
{
  abort();
}
a[16]=5;
free(a);
a=(int *)realloc(a, 16000);
if(a==NULL)
{
  abort();
}
a[16]+=8;
 27 ? 


Dans cette portion de code, y a-t-il un problème avec l'utilisation de realloc() ?
Si oui, lequel ?
int *a=(int *)malloc(8000);
if(a==NULL)
{
  abort();
}
a+=16;
*a=5;
a=realloc(a, 16000);
if(a==NULL)
{
  abort();
}
*a+=8;
free(a);
 28 ? 


En quoi la fonction realloc() est-elle souvent plus avantageuse que l'usage de la séquence : allouer un nouveau bloc, y recopier l'ancien avant de libérer l'ancien ?
 29 ? 


Lorsqu'un tableau dynamique doit mémoriser des éléments dont le nombre n'est pas connu à l'avance, quel est l'inconvénient d'augmenter systématiquement sa taille selon de très petits incréments ?
 30 ? 


Lorsqu'un tableau dynamique doit mémoriser des éléments dont le nombre n'est pas connu à l'avance, quel est l'inconvénient d'augmenter systématiquement sa taille selon de très grands incréments ?
 31 ? 


Lorsqu'un tableau dynamique doit mémoriser des éléments dont le nombre n'est pas connu à l'avance, quel est la stratégie raisonnable à adopter pour choisir la taille de l'incrément pour redimensionner le tableau ?
 32 ?