Я сделал тип данных:
typedef struct Sale_t *Sale;
struct Sale_t
{
int license;
int km_min;
int km_max;
int price;
};
Я создаю его с помощью этой функции:
Sale saleCreate(int license, int km_min, int km_max, int price,List sales)
{
if(saleFind(sales,license)==RENTAL_CAR_ALREADY_ON_SALE)
{
return NULL;
}
if(km_min<0||km_max<=km_min||price<=0)
{
return NULL;
}
Sale salePtr = malloc(sizeof(*salePtr));
if(!salePtr)
{
return NULL;
}
salePtr->license=license;
salePtr->km_min=km_min; //here it crashes
salePtr->km_max=km_max;
salePtr->price=price;
return salePtr;
}
(Не обращайте внимания на Sale
и Sale_t
; яЯ использую typedef
в заголовочном файле, так что это совсем не проблема.)
После некоторого тестирования я обнаружил, что если salePtr->km_min
получает любое целое число, отличное от 0
, программавылетает.
Что вызывает это?Я уверен, что это как-то связано с malloc()
...
РЕДАКТИРОВАТЬ
Я сделал аналогичный тип данных, который работает ОТЛИЧНО:
typedef struct Car_t *Car;
struct Car_t
{
int license;
char* name;
int price;
int km;
int renterId;
};
Car carCreate(int license, char* name, int price, int km, List cars)
{
if(carFind(cars,license)==RENTAL_CAR_ALREADY_EXISTS)
{
return NULL;
}
if(km<0||price<=0)
{
return NULL;
}
Car carPtr = malloc(sizeof(*carPtr));
if(!carPtr)
{
return NULL;
}
carPtr->km=km;
carPtr->license=license;
carPtr->name=name;
carPtr->price=price;
carPtr->renterId=0;
return carPtr;
}