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