2015-04-02 46 views
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]; 
    } 
} 
+0

要解決你的首要問題什麼的,您可能需要刪除'* '或者你需要爲每個'struct person'分配空間。就目前而言,您正在寫入未初始化的指針,並且當您這樣做時崩潰是常見的結果(行爲未定義,任何事情都會發生,但崩潰很可能)。 – 2015-04-02 02:11:16

+0

@JonathanLeffler我必須把:list.people [i] = malloc(sizeof(person)+ 1)?在數組中? – BDillan 2015-04-02 02:28:37

+0

不需要+1,但是,您需要爲陣列中的每個條目分配類似的內存。你還需要清理'list.people [i] =&pers [i];'作業;它應該是一個結構賦值'* list.people [i] = pers [i];',然後你可以辯論你是否需要'pers'作爲一個數組,如果它仍然是一個數組,應該是MAX_PEOPLE_ALLOWED而不是僅僅是10. – 2015-04-02 02:29:28

回答

0

@BDillan,我已經取得了一些簡單的修正你的代碼,希望您正在尋找類似這樣

#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() 
{ 

struct person_list list; 
struct person pers[10]; 
char descrip[MAX_LENGTH]; 
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,descrip); 
//puts(pers[i].name); 
    list.people[i] = &pers[i]; 
} 

//to display the details of persions entered above 

for (i = 0;i < MAX_PEOPLE_ALLOWED; i++) 
      printf("%s \n",list.people[i]->name); 

}