Volevo osservare come la funzione free operava sulle variabili.
per cui ho creato questo programmino molto semplice:
A quanto avevo capito, free riduce l'indirizzo b a come era prima del malloc, quindi quanto meno non modificabile da parte del programma.
Mi aspettavo l'errore "Segmentation fault", come il terminale spesso dice quando cerco di usare memoria non accessibile oppure non inizializzata.
Tuttavia questo è stato l'output:
Quindi su b sono riuscito sia a leggere che a sovrascrivere...
Ma allora mi chiedo a che serve la funzione free...
per cui ho creato questo programmino molto semplice:
C:
#include <stdlib.h>
#include <stdio.h>
typedef struct node{
struct node* next;} node;
typedef node* list;
list new(){
list v;
v=malloc(sizeof(node));
v->next=NULL;}
int main(){
list a,b;
a=new();
b=new();
b->next=a;
printf("%p -> %p\n",b,a);
free(b);
printf("%p -> %p\n",b,a);
printf("b->next=%p\n",b->next);
b->next=a;
printf("%p -> %p",b,a);
return 1;}
Mi aspettavo l'errore "Segmentation fault", come il terminale spesso dice quando cerco di usare memoria non accessibile oppure non inizializzata.
Tuttavia questo è stato l'output:
0x56000f5b8280 -> 0x56000f5b8260
0x56000f5b8280 -> 0x56000f5b8260
b->next=(nil)
0x56000f5b8280 -> 0x56000f5b8260
0x56000f5b8280 -> 0x56000f5b8260
b->next=(nil)
0x56000f5b8280 -> 0x56000f5b8260
Ma allora mi chiedo a che serve la funzione free...