【问题标题】:Struct | assign struct objects | Segmentation Fault Error结构 |分配结构对象 |分段错误错误
【发布时间】:2021-06-12 22:27:54
【问题描述】:

我定义了一个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)

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

【问题讨论】:

  • double ctime = 2309212380.323100 此处缺少分号。还有什么是buffer?请发帖Minimal, Reproducible Example
  • 你是如何初始化指针 obs_data 本身的,而不是它所指向的?
  • `我在其中实例化和“观察者数据”,不,你不是。您仍然需要为它分配内存。 C 中没有“实例化”。
  • 我进行了相应的编辑。

标签: c linux pointers struct


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2011-08-24
    • 2020-02-17
    • 2014-01-18
    • 2023-04-04
    • 2021-11-08
    • 2018-07-12
    相关资源
    最近更新 更多