У меня есть функция, которая переадресует указатель, указанный в качестве аргумента для нового размера. Теперь проблема в том, что - согласно странице man - realloc
нужен указатель, который был возвращен malloc
или calloc
.Как я могу убедиться, что вызывающий абонент передает указатель malloc'd?
Как я могу убедиться, что вызывающий абонент передает указатель, соответствующий этим требованиям? Кажется, что нет встроенных C-механиков (таких как классификаторы типов или что-то еще).
Теперь, прежде чем я реструктурирую свой API (поскольку я считаю, что функция, поскольку теперь она не достаточно надежна), можете ли вы подтвердить, что я ничего не пропустил?
Заранее спасибо.
Edit: Одно решение, очевидно, будет в таНос в функция. Проблема заключается в том, что вызывающий объект не «видит» распределение. Таким образом, мне нужно будет явно сказать в документах, что он должен освободить указатель. Это даже хуже, чем ожидать, что они предоставят указатель malloc'd (что будет означать, что вызывающий абонент должен его освободить).
Что я действительно хочу, это то, что блокирует злоупотребления во время компиляции. Это и пони. ;-)
вам нужно сделать это на самом деле, что дурака делать? – Nyan
, по крайней мере, я бы хотел, да – RWS
Поскольку вы не можете, вы, вероятно, должны перестать беспокоиться и сделать что-то более интересное. Люди могут подорвать ** любые ** и ** все ** проверки или профилактики, которые вы хотите попробовать. Не тратьте время на предотвращение. Инвестируйте время в грохот и ясно, чтобы они могли прочитать сообщение об ошибке и осознать свою ошибку. –