У меня есть функция, которая создает дубликат для определенного массива. Структура для моего кода:Утверждение не выполнено после memcpy в c
typedef struct {
int* data;
unsigned int len;
} intarr_t;
функция, которую я написал:
intarr_t* intarr_copy(const intarr_t* ia)
{
unsigned int len;
intarr_t* newia = malloc(sizeof(intarr_t));
assert (newia);
newia->data = malloc(sizeof(int)*len);
newia->len = len;
if (newia == 0)
{
return NULL;
}
else
{
memcpy (newia->data, ia->data, len*sizeof(int));
}
return 0;
}
Когда я тестировал эту функцию, он остановил свою функцию и сказал, что мое утверждение для НМА не удалось. Единственное место, где у меня есть ia, - это memcpy. Но я даже не сделал никаких утверждений в своей функции. Кто-нибудь знает, почему это дало мне ошибку утверждения?
Причина может заключаться в том, что вы никогда не инициализируете свою переменную 'len' значением. Вероятно, вы действительно хотите сделать что-то вроде 'unsigned int len = ia-> len;' –
len неинициализирован. также старайтесь держать код когерентным и не смешивать. 'NULL',' 0' и тому подобное, если вы действительно имеете в виду то же самое. Другое дело, что вы утверждаете, что если 'newia' должным образом распределяется и чем позже проверяет его с помощью оператора if. Я действительно не знаю, что этот код даже должен делать, поскольку вы копируете случайные объемы данных в зависимости от len ... –
'unsigned int len = ia-> len;' и intXXX_t - системное зарезервированное имя. – BLUEPIXY