Цель этой функции — удалить элемент с наивысшим индексом, который фактически является последним элементом массива. Я запустил этот код с массивом длиной 5, и он работал нормально до тех пор, пока не достиг точки, где длина массива была равна 0. Затем внезапно он сказал, что прервано из-за неудачного утверждения с помощью ia-> данные. Почему это дает мне ошибку утверждения, когда он попадает в массив NULL?
Вот структура моего кода:
typedef struct {
int* data;
unsigned int len;
} intarr_t;
Вот функция для удаления элемента с самым высоким индексом ниже:
intarr_result_t intarr_pop( intarr_t* ia, int* i )
{
unsigned int len = ia->len;
if (ia == NULL)
{
return INTARR_BADARRAY;
}
else
{
ia->data = realloc(ia->data, (sizeof(int)*(len-1)));
assert (ia->data);
if (ia->data != 0)
{
if (i != 0)
{
*i = ia->data[len-1]
ia->len = len-1;
return INTARR_OK;
}
}
else
{
return INTARR_BADINDEX;
}
}
return 0;
}
len
это0
,data
этоNULL
? - person Sourav Ghosh   schedule 28.11.2014len = ia->len
перед проверкойif (ia == NULL)
- плохая идея. Кроме того, что вы ожидали получить, вызвавrealloc
с 0 (кромеNULL
)? - person barak manos   schedule 28.11.2014