Skip to content
Advertisement

Struct | assign struct objects | Segmentation Fault Error

I define a struct type as follows:

typedef struct {
    int obs_flag;
    double obs_timestamp;
    int event_mask;
    char *event_name;
    char *filedir;
} structdata;

where I have a pointer named obs_data:

structdata *obs_data;

then I want to assign each object of the obs_data as follows:

int observer_flag = 1;
double ctime = 2309212380.323100;
struct inotify_event* event = (struct inotify_event*)(buffer + bytesProcessed);

obs_data->obs_flag = observer_flag;
obs_data->obs_timestamp = ctime;
obs_data->event_mask = event->mask;
obs_data->event_name = event->name;
obs_data->filedir = "./myDir/";

in the above, event is a struct from the inotify that captures the events associated with changes to a file or directory in Linux.

when I run the above chunk of code in my program I encounter the Segmentation fault (core dumped).

I am not a pro working with stucts and pointers. Any help is greatly appreciated.

Advertisement

Answer

Your obs_data is just a pointer!! It’s not an instance of structdata. If you want it to be a pointer, you need to malloc memory to hold the struct.

So before using obs_data you need code like:

obs_data = malloc(sizeof *obs_data);  // Allocate memory for 1 instance of structdata
if (obs_data == NULL)
{
    // allocation failed
    exit(1);
}
// Now you can assign values like
obs_data->obs_flag = observer_flag;
...
...

and once you are done using it, remember to free the memory like

free(obs_data);
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement