2009-12-19 7 views
0

J'ai une structure appelée table, je veux juste créer une table, comme constructeur en java, mais quand j'appelle cette fonction principale, il donne la segmentation fautec structure erreur de segmentation

struct table *create(char *name,int number,char *s_name) 
{ 
    struct table *newTable; 
    newTable->name = name; 
    newTable->number = number; 
    newTable->s_name = s_name; 
    return newTable; 
} 

Répondre

10
struct table *newTable = malloc(sizeof(struct table)); 

Ne pas oublier d'appeler gratuitement lorsque vous avez terminé de l'utiliser, comme C ne dispose pas d'un Garbage Collector comme java a.

+1

Cela devrait être 'sizeof (struct table)' ou 'sizeof * newTable' (je préfère ce dernier). Contrairement à C++, les balises struct doivent être précédées du mot clé 'struct'. –

+0

@John: à moins que la table ne soit tapée ... je l'ai éditée quand même. –

8

Vous havre de paix » t alloué de la mémoire pour l'objet et décrivent les champs de la structure. Vous devez utiliser malloc pour allouer de la mémoire pour NEWTABLE avant d'y accéder

0

& SIGSEGV (Défaut de segmentation) est parfaitement correct pour le code sauf si vous allouez de la mémoire explicitement en utilisant malloc ou d'autres méthodes d'allocation de mémoire.

0

Essayez:

struct table *create(char *name,int number,char *s_name) 
{ 
    struct table *newTable = malloc(sizeof(*newTable)); 
    if (!newTable) 
    return NULL; 

    newTable->name = name; 
    newTable->number = number; 
    newTable->s_name = s_name; 
    return newTable; 
} 

Une autre mise en garde: dans ce code, newTable->name juste des points à la condition name, aucune copie. Ce n'est peut-être pas ce que vous voulez, mais c'est difficile à dire à partir de ce petit extrait. Une alternative est de dupliquer le nom. La même chose vaut pour s_name.

+0

Utilisez strdup() pour faire cela pour le nom et s_name comme eliben mentionné. Les assigner est un non-non. – t0mm13b

Questions connexes