typedef struct mensagem
{
    int sender ;
    int receiver ;
    char *text ;
} *Item ;


typedef struct node 
{
    Item item ;
    struct node *next ;
} *link ;

link init(char* text)
{
    link x = (link) malloc(sizeof(struct node));
    (x->item->text) = (char*) malloc(sizeof(char)*(strlen(text)+1));
    strcpy(x->item->text, text);
    x->next = NULL;
    return x;
}

I meant to use the data inside item, but I get a Segmentation Fault on the line:

(x->item->text) = (char*) malloc(sizeof(char)*(strlen(text)+1));

I'm fairly new to C and pointers, but I can't find the problem here.

有帮助吗?

解决方案 2

Put this after allocating memory for x:

x->item = malloc(sizeof(struct mensagem));

You have to allocate the memory for the field 'item' before you can actually access and allocate its fields.

其他提示

You haven't allocated memory for the structure pointed to by x->item. Add

x->item = malloc(sizeof (struct mensamam));

before the other malloc.

This should do just fine:

typedef struct mensagem
{
    int sender ;
    int receiver ;
    char *text ;
} Item ;


typedef struct node 
{
    Item *item ;
    struct node *next ;
} Link ;

Link *init(char *text)
{
    // Note: Do error checking after each of these lines in case malloc() fails!
    Link *x = malloc(sizeof(Link));
    x->item = malloc(sizeof(Item));
    x->item->text = malloc(sizeof(char) * (strlen(text) + 1));

    strcpy(x->item->text, text);
    x->next = NULL;
    return x;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top