Bonjour
Je cherche à savoir s'il est possible de libérer la mémoire occupée par une variable lorsqu'on a créé cette variable de manière «directe» (sans passer par un pointeur).
Un code pour illustrer:
Dans le troisième bloc d'instruction je crée la variable c de manière «directe» mais quand j'applique la fonction «free» à &c ça ne marche pas. Pourtant &c est un pointeur non? Savez vous comment je devrais faire ici?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 int main(int argc, char *argv[]) { // Premier bloc d'instructions. int *a; a = malloc (sizeof(int)); // En une seule ligne int *a = malloc (sizeof(int)); ça va aussi. printf("L'adresse de a, c'est à dire l'adresse du pointeur sur *a est %p. \n", &a); printf("L'adresse de *a, c'est a dire a est %p. \n", a); *a = 25; printf("*a = %d. \n", *a); free(a); // Ca marche (pas de message d'erreur). // Deuxième bloc d'instructions. int *b; printf("L'adresse de b, c'est à dire l'adresse du pointeur sur *b est %p. \n", &b); printf("L'adresse de *b, c'est a dire b est %p. \n", b); *b = 75; printf("*b = %d. \n", *b); free(b); // Ca ne marche pas // A l'exectuion -> Erreur de segmentation (core dumped) /*// Troisième bloc d'instructions. int c = 5; free(&c); // Ca ne marche pas. //A la compilation -> "warning: attempt to free a non-heap object b [-Wfree-nonheap-object]"*/ }
J'en profite pour vous demander ce que vous pensez du deuxième bloc d'instruction. J'ai oublié d'attribuer de la mémoire à b, et pourtant je peut attribuer une valeur à *b. Vous en pensez quoi? C'est normal?
Merci à qui pourra répondre. :-)
Partager