Bonsoir,
Relativement au problème posé, je me permets de vous soumettre à votre étude un code, somme toute assez complet.
#include <stdio.h>
#include <stdlib.h>
/* Nous souhaitons gérer dynamiquement la taille d'un tableau unidimentionnel de type "long".
* cette taille est le résultat d'une saisie clavier récupérée par un scanf
*/
int main(int argc, char * argv[], char * envp[])
{
size_t uiTaille;
int mainReturnValue = EXIT_SUCCESS;
if (scanf("%u", &uiTaille) == 1)
{
/* La ligne de code suivant est somme toute la plus importante.
* Elle déclare un pointeur constant, ce qui endigue toute tentative d'en modifier la valeur.
* Ce pointeur correspond indirectement au nom du tableau dont nous avons besoin.
* La fonction "malloc" demande au système de concéder, à ce programme, une partie de la RAM
* dont il assure la gestion.
* C'est dans cette RAM allouée que seront implantés les éléments du tableau.
* L'argument indiquant un nombre d'octets, sachant que sizeof(long) fournit le nombre d'octets
* occupés par un tel type, en le multipliant par le nombre d'éléments du tableau, cela contribue
* à demander le juste nombre nécessaire
*/
long * const aTab = malloc(sizeof(long) * uiTaille);
if (aTab != NULL)
{
long index;
/* Initialisation des éléments du tableau à zéro, par exemple
*/
for (index = 0; index < uiTaille; index++)
aTab[index] = 0;
printf("Le premier élément du tableau est initialié à : %ld\n", aTab[0]);
printf("Le dernier élément du tableau est initialié à : %ld\n", aTab[uiTaille -1 ]);
/* La fonction "free" restitue au système la mémoire qu'il lui a concédée (temporairement)
*/
free(aTab);
putchar('\n');
}
else
{
puts("L'allocation dynamique de mémoire a échoué.");
mainReturnValue = EXIT_FAILURE;
}
}
else
{
puts("La saisie de la taille est incorrecte");
mainReturnValue = EXIT_FAILURE;
}
return mainReturnValue;
}
Cordialement.