C - Malloc et memcpy (gestion de la mémoire)

Je suis un peu novice en C et je vais avoir du mal à comprendre comment la mémoire fonctionne, notamment intégré des fonctions comme memcpy.

Voici un struct je suis en utilisant

 struct data_t {
    int datasize;   
    void *data; 
 };

Et voici une fonction auxiliaire que je suis de l'utiliser avec:

struct data_t *data_create(int size)
{
   struct data_t *dt=malloc(sizeof(struct data_t)+size);
   dt->datasize=size;   
   dt->data="1234567890a";
   return dt;
}

Maintenant dans le main fonction je n'ai aucun problème à faire cela:

struct data_t *data = data_create(1024);
data->data="123456a";//just an example

Mais cela jette un Seg Fault:

memcpy(data->data,"123456a",strlen("1234567890a")+1);

Ma question est pourquoi? Et comment puis-je l'éviter?
Veuillez garder à l'esprit que je suis novice en C alors comment C traite de la mémoire est un peu nouveau pour moi

Merci.

Edit: Ça fonctionne! Je vous remercie beaucoup. Complètement raté le pointeur de données. Maintenant tout fonctionne bien selon valgrind.

OriginalL'auteur PTdude | 2011-10-08