我是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分段错误(核心已转储)”
答案 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
相反。