尝试写入struct时出现分段错误

时间:2019-07-11 09:07:06

标签: c

我是C语言的新手,我正在尝试编写简单的计划程序。我有房间,想让他们充满活动。

static void create_dummy_data() 
{

    #define max_entries 5

    struct event
    {
        char *event_name;
        int duration_min; // duration in minutes 
    };

    struct room
    {
        char *room_name;
        struct event *events[10];
    };

    int i = 0;
    char *names[] = {"Room1", "Room2", "Room3", "Room4", "Room5", "Room6"};

    struct room *rooms[max_entries];

    for ( i = 0; i < max_entries ; i++)
    {
        rooms[i]->room_name = names[i];  // The problem is here
    }

}

我收到错误消息“ 8263分段错误(核心已转储)”

1 个答案:

答案 0 :(得分:3)

声明struct room *rooms[max_entries];时,在数据段中将有max_entries个指针数组,这些指针已初始化为NULL

由于您没有为房间分配内存,这意味着当您写rooms[i]->room_name时,您实际上将完成与NULL->room_name相同的操作。系统的内存保护机制检测到您要访问不允许的内存部分,并在出现分段错误时向您发出信号。

您必须添加:

 rooms[i] = malloc(sizeof (struct room));
 if(!rooms[i]) exit(EXIT_FAILURE);  // example error handling, can be different

进入循环。

BTW:C语言中的用法是在所有大写字母中定义宏,以便立即看到它是宏。因此,您应该使用

#define MAX_ENTRIES 5

相反。