0
在我的代码中,有两个结构。一个叫人,一个叫person_list,通过引用来保存人物结构或“人”的列表。为包含指向不同结构的指针数组的结构填充数据
我想在person_list中填写(或引用)10个人结构,但是在运行此代码时,我遇到了分段错误。我如何处理或申报每个人的记忆,这样才能奏效?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 50
#define MAX_PEOPLE_ALLOWED 10
struct person_list {
struct person *people[MAX_PEOPLE_ALLOWED];
};
struct person
{
char name[MAX_LENGTH];
//int age;
};
int main(int argc, char *argv)
{
struct person_list list;
struct person pers[10];
int i;
char name[MAX_LENGTH];
for (i = 0; i < MAX_PEOPLE_ALLOWED; i++) {
sprintf(descrip, "I am person number: %d", i);
strcpy(&pers[i].name, name);
list.people[i] = &pers[i];
}
}
要解决你的首要问题什么的,您可能需要删除'* '或者你需要为每个'struct person'分配空间。就目前而言,您正在写入未初始化的指针,并且当您这样做时崩溃是常见的结果(行为未定义,任何事情都会发生,但崩溃很可能)。 – 2015-04-02 02:11:16
@JonathanLeffler我必须把:list.people [i] = malloc(sizeof(person)+ 1)?在数组中? – BDillan 2015-04-02 02:28:37
不需要+1,但是,您需要为阵列中的每个条目分配类似的内存。你还需要清理'list.people [i] =&pers [i];'作业;它应该是一个结构赋值'* list.people [i] = pers [i];',然后你可以辩论你是否需要'pers'作为一个数组,如果它仍然是一个数组,应该是MAX_PEOPLE_ALLOWED而不是仅仅是10. – 2015-04-02 02:29:28