Здравствуйте, borya_ilin, Вы писали:
C>> То бишь вызывающая функция должна передать в вызываемую функцию уже готовый массив. И сама же потом его освободить. Вызывающей функции лучше знать откуда и как распределялась память под массив, и что с ней потом делать.
_>А какого размера должен быть массив, который передаётся в функцию?
_>Функция, к примеру, сжатый файл в буфер читает.
Что делать? Гипс снимают! Клиент уезжает! Шеф! Все пропало! Все пропало!


Это разговор отдельный. Как определять. Вариантов масса.
1. Можно использовать WinAPI like стиль. Если присмотреться к функциям WinAPI, то часто используется следующий прием.
Передается указатель на массив для записи результатов чего то, и его размер. В случае успеха функция возвращает число записанных в результирующий массив элементов. Дык вот очень часто оговаривается вариант, что если передать в функцию NULL или максимальный размер элементов в ноль, то она вернет сколько ей надо места для записи.
2. Если случай сложный, или накладный как чтение файлов, то следует передавать не массив в функцию, а объект который сможет сам управлять своим размером, и знает и как это лучше сделать.
Но в любом случае, всегда стоит стараться избегать такого управления памятью, в стиле "Батяня, слышь? Рубит! А я отвожу". Код не лес, и тут такие бубны добром не кончаются. Примеров до упячки можно привести. В контексте стартового топика: в одном месте new, в другом delete. Ну это все хорошо пока какой-нить
пьянь супер-пупер-гик не перегрузит new для типа. И подставит собственный аллоктор. На стандартном delete[] словим в общем случае вообще что-угодно, кроме корректного выполнения.
Так что в таких вариантах лучше сразу приучаться четко задавать аллокатор памяти.
А примеров таких проблема масса. Пока все в пределах одного модуля — все прекрасно. Как только в разных, запросто можем получить проблемную ситуацию.
Это конечно все разговоры про архитектуру, а у меня сложилось впечатление, что вопрошающий только разбирается вообще что называется с синтаксисом. Тогда конечно архитектурные разговоры в сторону, но уж и тогда про "чтение сжатого файла" тоже в сторону — это тут и еще больше будет не причем.
А вот про то что, в функцию можно передать массив под данные и его размер, упомянуть стоит. Нехай молодежь учится сразу, пусть хотя бы "держа в уме" про такой прием. Это лучше, чем переучиваться и заново ломать чужие копья.