잠시 동안 포럼을 검색했지만이 문제가 해결되지 않은 것 같습니다. 그것은 컴파일하고 내가 할 필요가있는 거의 모든 것을하지만, 한가지는 꺼져 있습니다. struct chore에 대한 포인터의 포인터 인 chore_array를 업데이트 할 때마다 새 업데이트가 이전의 모든 할당을 대체합니다.struct 포인터의 끝에 struct 포인터를 추가하십시오.
typdef struct _chore{
char *chore_name;
int number;
char *due_date;
}chore;
typedef struct _chorelist{
chore **chore_array;
int occupied_number;
int size_of_array;
}chorelist;
void addChoreToLast(chorelist *chore_list,chore *chore_input)
{
if(chore_list->occupied_number < chore_list->size_of_array)
{
chore_list->chore_array[chore_list->occupied_number]=chore_input;
chore_list->occupied_number++;
}
else
{
chorelist *pChoreList = (struct _chorelist*)malloc(sizeof(struct _chorelist)*chore_list->occupied_number);
memcpy(pChoreList,chore_list,sizeof(struct _chorelist*)+sizeof(struct _chore*)+1);
pChoreList = chore_list;
pChoreList->chore_array[pChoreList->occupied_number]=chore_input;
pChoreList->occupied_number++;
}
코드 입력 :
Enter chore name : Dishes
Enter chore number : 1
Enter Date to complete: 04/21/2013
Enter another chore : Sweeping
Enter chore number : 4
Enter Date to complete: 05/02/2013
코드 출력 :
Entered Chores are : Sweeping, Chore Number: 1, Date: 04/21/2013
Sweeping, Chore Number: 4, Date: 05/02/2013
원하는 출력 : 기본적으로 제공되며 변경할 수 없습니다 내 주요 기능에
Entered Chores are : Dishes, Chore Number: 1, Date: 04/21/2013
Sweeping, Chore Number: 4, Date: 05/02/2013
, 그것은 initiali 함수를 호출한다. chorelist을 입력하고 chorelist 구조체의 각 멤버에게 메모리를 할당하여 각 멤버에 값과 문자열을 할당 할 수 있습니다. 제 문제는 이미 정의 된 작업 목록을 사용하는 각 함수 호출 후에 자질레의 이름이 바뀌는 것입니다.
내 할당 진술 문은 입니다. addChoreToLast? 미리 감사는
'의 방어 적이기 (pChoreList, chore_list,는 sizeof (구조체 _chorelist를 *) +를 sizeof (구조체 _chore *) + 1);'당신은 수를 곱 깜빡 점유 된 슬롯의 BTW :이 경우 realloc() 쉽습니다. – wildplasser
실제로, realloc이 필요합니다. 이전 목록을 비우는 것이 좋지만 어떤 경우에도 else 블록 전체가 뒤죽박죽이고 부정확합니다 (잘못된 변수를 설정하는 것입니다). –