Je suis en train d'apprendre le C et je suis en train d'essayer d'écrire une base de données de pile de la structure, mais je n'arrive pas à obtenir de base malloc
/free
droit.
Voici le code que j'ai utilisé (je suis en train de poster une petite partie ici pour illustrer un problème spécifique, et non pas la totalité du code, mais le message d'erreur a été générée par l'exécution de cet exemple de code en 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;
}
Quand je le lance via valgrind
avec --leak-check=full --track-origins=yes
, j'obtiens l'erreur suivante:
==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
Je pense que cette erreur signifie que l' destroyEntry
fonction n'est pas autorisé à modifier la mémoire allouée de manière explicite dans le main. Est ce que le droit? Pourquoi ne puis-je pas juste free
la mémoire, je alloué en main
dans une autre fonction? (et est-ce le comportement d'une certaine manière spécifique à la main?)