结构 |分配结构对象|分段错误错误

时间:2021-03-15 16:13:43

标签: c linux pointers struct

我定义了一个 struct 类型如下:

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

我有一个名为 obs_data 的指针:

structdata *obs_data;

然后我想按如下方式分配 obs_data 的每个对象:

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/";

在上面,eventinotify 中的一个结构体,用于捕获与 Linux 中文件或目录更改相关的事件。

当我在程序中运行上述代码块时,我遇到了 Segmentation fault (core dumped)

我不是使用结构和指针的专业人士。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你的 obs_data 只是一个指针!!它不是 structdata 的实例。如果你想让它成为一个指针,你需要malloc内存来保存结构体。

因此在使用 obs_data 之前,您需要如下代码:

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;
...
...

一旦你用完它,记得像这样释放内存

free(obs_data);