Видя некоторые неправильные ссылки на инструменты C ++ для вопроса C, вот ответ для современного C.
Ваши представления о том, что пошло не так, совершенно верны, так как вы сделали это, у вас есть только указатель, нет информации о размере выделения.
Modern C имеет массивы переменной длины (VLA), которые можно использовать напрямую или через malloc
.Direcly:
int list[n];
, и тогда ваша идея с sizeof
работает «из коробки», даже если вы за это время поменяли n
.Это использование должно быть предпринято с некоторой осторожностью, так как это размещено в стеке.Вы не должны резервировать слишком много здесь.Для использования с malloc:
int (list*)[n] = malloc(*list);
Тогда вам придется немного адаптировать свой код, в основном поместив (*list)
везде, где у вас было всего list
.