我定义了一个 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/";
在上面,event
是 inotify
中的一个结构体,用于捕获与 Linux 中文件或目录更改相关的事件。
当我在程序中运行上述代码块时,我遇到了 Segmentation fault (core dumped)
。
我不是使用结构和指针的专业人士。非常感谢任何帮助。
答案 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);