는 보내기 struct
예외 동안
struct HotelManagement
{
Hotel_t *hotel;
Customer_t *customers;
reservation_t *reservations;
int physicalSize;
int registerdSize;
int physicalSizeReserv;
int registerdSizeReserv;
} typedef HotelManagement_t;
그리고 다음 main
다음
printf("-----DETAILS FOR CUSTOMER-----\n");
printf("enter name ");
gets(tempName);//"cleans" the buffer
gets(tempName);
customerName = strdup(tempName);
printf("nenter credit card ");
gets(tempCredit);
creditCardNumber = strdup(tempCredit);
printf("enter credit card expiration month(mm)\n");
printf("enter credit card expiration year(yyyy)\n");
scanf("%d",&month);
scanf("%d",&year);
addCustomer(customerName,creditCardNumber, month,year,&hm);
및 addCustomer
다음의 구현 :
void addCustomer(char *customerName, char *numberOfCreditCard,int month,int year,HotelManagement_t *hotelMang)
{
int *m = &month;
int *y = &year;
int i;
if (hotelMang->physicalSize == hotelMang->registerdSize)
{
hotelMang->customers = (Customer_t*)realloc(hotelMang->customers, hotelMang->registerdSize * sizeof(Customer_t));
}
hotelMang->customers[hotelMang->registerdSize].id = hotelMang->registerdSize+1;//id starts with '1'
hotelMang->customers[hotelMang->registerdSize].cName = (char*)malloc(strlen(customerName)*sizeof(char));//initalize space for the Customers name
strcpy(hotelMang->customers[hotelMang->registerdSize].cName ,customerName);
if (checkValidCreditCard(&month,&year,numberOfCreditCard) == 1)
{
hotelMang->customers[hotelMang->registerdSize].credit = (char*)malloc(strlen(numberOfCreditCard)*sizeof(char));//initalize size
strcpy(hotelMang->customers[hotelMang->registerdSize].credit, numberOfCreditCard);
hotelMang->customers[hotelMang->registerdSize].month = month;
hotelMang->customers[hotelMang->registerdSize].year = year;
}
//increments
for (i = 0; i <= hotelMang->registerdSize; i++)
{
printOneCustomer(hotelMang->customers[i]);
}
hotelMang->registerdSize= hotelMang->registerdSize +1;
}
프로그래머를 배열을 초기화하는 함수 s ...
hotelManagement->customers = (Customer_t*)calloc(1, sizeof(Customer_t));
hotelManagement->hotel->roomsMat = (Room_t**)calloc(floors, sizeof(Room_t*));
hotelManagement->reservations = (reservation_t*)calloc(1, sizeof(reservation_t));
점점 고객을 배열에 추가하기 때문에 고객 공간을 다시 할당하려고하지만 예외가 발생합니다. 그 이유가 무엇일까요? 당신이 아주 처음 addCustomer
를 호출 할 때
내 *** 추측 ***? 'HotelManagement_t' 구조체'hm'을 초기화하지 않습니다. –
또한, 결코 * 사용 *하여'gets'! 최신 C 표준에서 제거 된 위험한 기능입니다. 예 : ['fgets'] (http://en.cppreference.com/w/c/io/fgets). –
전체 메인입니까? 예인 경우 누락 된 세 줄을 추가하십시오. 그렇지 않으면 우리는 당신이 뭔가를 놓쳤는 지 궁금해합니다. – klutt