Hello,

The following code results in a segmentation fault when line 36 is executed
Code:
strcpy(node->summary_record->c_detail1, summary_record->c_detail1);
The malloc at line 24 is successful
Code:
summary_t *node = malloc(sizeof(summary_t) * 1);
and lines 34 and 35 are also successful
Code:
node->prev = NULL;
node->next = NULL
I'm guessing that the issue must be this line
Code:
summary_t *node = malloc(sizeof(summary_t) * 1);
And that the
Code:
sizeof(summary_t)
is not allocating the memory for the
Code:
summary_record_t
.

But if I'm correct, I don't know why this is happening or how to resolve?

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct record
{
    char        c_detail1[15];
    char        c_detail2[100];
    float       f_value1;
    float       f_value2;
} summary_record_t;

typedef struct summary
{
    summary_record_t  *summary_record;
    struct summary_t  *prev;
    struct summary_t  *next;
} summary_t;

summary_t *add_at(int pos, summary_t *summary_list, summary_record_t *summary_record)
{
    summary_t *node = malloc(sizeof(summary_t) * 1);
    if (node == NULL)
    {
        printf("malloc failed\n");
    }
    else
    {
        printf("malloc succeeded\n");
    }

    node->prev = NULL;
    node->next = NULL;
    strcpy(node->summary_record->c_detail1, summary_record->c_detail1);
    strcpy(node->summary_record->c_detail2, summary_record->c_detail2);
    node->summary_record->f_value1 = summary_record->f_value1;
    node->summary_record->f_value2 = summary_record->f_value2;
}

summary_t *add_end(summary_t *summary_list, summary_record_t *summary_record)
{
    add_at(-1, summary_list, summary_record);
    return;
}

int main()
{
    summary_t *summary_list = malloc(sizeof(summary_t) * 1);
    summary_list = NULL;

    summary_record_t *summary_record = malloc(sizeof(summary_record_t) * 1);

    strcpy(summary_record->c_detail1,"some detail");
    strcpy(summary_record->c_detail2,"another detail");
    summary_record->f_value1 = 200;
    summary_record->f_value2 = 250;
    summary_list = add_end(summary_list,summary_record);

    return 0;
}
Thanks

VW