Sto cercando di imparare C e attualmente sto provando a scrivere una struttura di base dei dati dello stack, ma non riesco a ottenere il minimo malloc
/free
.Memoria libera allocata in una funzione diversa?
Ecco il codice che ho usato (sto solo postando un piccola parte qui per illustrare un problema specifico, non il codice totale, ma il messaggio di errore è stato generato semplicemente eseguendo questo codice di esempio nel valgrind
)
#include <stdio.h>
#include <stdlib.h>
typedef struct Entry {
struct Entry *previous;
int value;
} Entry;
void destroyEntry(Entry entry);
int main(int argc, char *argv[])
{
Entry* apple;
apple = malloc(sizeof(Entry));
destroyEntry(*(apple));
return 0;
}
void destroyEntry(Entry entry)
{
Entry *entry_ptr = &entry;
free(entry_ptr);
return;
}
Quando corro attraverso valgrind
con --leak-check=full --track-origins=yes
, ottengo il seguente errore:
==20674== Invalid free()/delete/delete[]/realloc()
==20674== at 0x4028E58: free (vg_replace_malloc.c:427)
==20674== by 0x80485B2: destroyEntry (testing.c:53)
==20674== by 0x8048477: main (testing.c:26)
==20674== Address 0xbecc0070 is on thread 1's stack
credo questo errore significa che la funzione destroyEntry
non è consentito di modificare la memoria al localizzato esplicitamente in main. È giusto? Perché non posso semplicemente aggiungere la memoria che ho assegnato in main
alla funzione free
in un'altra funzione? (e questo comportamento è in qualche modo specifico per il main?)
+1 per domande chiare e SSCCE. –
@MatteoItalia Non avevo mai sentito parlare di [SSCCE] (http://sscce.org/) prima. Sicuramente un buon concetto. Grazie per avermi fatto conoscere. –
Chiama per valore ??? –