Функция malloc
принимает аргумент size_t
, а size_t
определяется для вашей сборки как unsigned long int
(как это часто бывает). В вашем вызове:
setarray = (set*)malloc(sizeof(set) * number_of_sets);
вы умножаете такое значение size_t
(оператор sizeof
дает size_t
) на (подписанную) int
переменную - отсюда и предупреждение.
Чтобы избежать этого, либо явно приведите number_of_sets
к size_t
, например так:
setarray = (set*)malloc(sizeof(set) * (size_t)number_of_sets);
Или, лучше, измените тип этого аргумента на size_t
:
void initSetArray(set *setarray, size_t number_of_sets, size_t number_of_blocks)
{
setarray = (set*)malloc(sizeof(set) * number_of_sets);
}
Как правило, при использовании переменных, представляющих «количество» или «размер» объектов, предпочтительным является unsigned int (если вы не можете действительно имеют отрицательный счет или размер).