Форум программистов, компьютерный форум CyberForum.ru

Функция которая возвращает динамический массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
gagarin0
2 / 2 / 0
Регистрация: 01.10.2010
Сообщений: 22
17.01.2011, 14:17     Функция которая возвращает динамический массив #1
Здравствуйте!
у меня такой глупый вопрос. Я все время путаюсь и никак не могу четко сформулировать на него ответ. Помогите мне раз и навсегда уяснить этот момент.
припустим есть функция, в которую передается указатель на массив и его размер... в этой функции нужно сделать, что-то с данными этого массива и вернуть их в программу, данные в смысле. Но первоначальный массив изменяться не должен. как это сделать?
мы в функции должны создать динамический массив, так? проделать преобразования..а как вернуть его в программу? память нужно освободить, чтоб не было утечки.. как тогда возвращать данные? скопировать все элементы динамического массива в локальный массив и передавать программе указатель на локальный массив? тоже вроде не то...
вообщем просветите, пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 14:17     Функция которая возвращает динамический массив
Посмотрите здесь:

функция, которая возвращает несколько значений C++
[C++] Шаблонная функция с явной специализацией не возвращает динамический массив C++
C++ функция которая возвращает массив
C++ Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432)
Функция которая возвращает класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 14:26     Функция которая возвращает динамический массив #2
Вы можете выделить память в одной функции, а освободить их в другой. Память ведь выделяется в куче, а работаете вы с ней через указатель на начало этой памяти. Значит, тягать этот указатель вы можете как захотите, потом с помощью него выделенную в одном месте память можно освободить в другом.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.01.2011, 15:15     Функция которая возвращает динамический массив #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
 
int * increased_copy(const int * arr, size_t size, int delta){
    int * ret;
    size_t i;
    
    if ( ( ret = malloc(sizeof(int) * size) ) == NULL ){
        perror("malloc");
        return NULL;
    }
    
    for ( i = 0; i < size; ++i )
        ret[i] = arr[i] + delta;
    
    return ret;
}
 
void dump(int * arr, size_t size){
    while ( size-- )
        printf("%d%c", *arr++, ( size ) ? ' ' : '\n');
}
 
#define SIZE 5
#define DELTA 1
 
int main(void){
    int arr[SIZE] = { 1, 2, 3, 4, 5 }, * inc;
    
    if ( ( inc = increased_copy(arr, SIZE, DELTA) ) == NULL ){
        fprintf(stderr, "Can't copy array!\n");
        exit(1);
    }
    
    dump(arr, SIZE);
    dump(inc, SIZE);
    
    free(inc);
    return 0;
}
gagarin0
2 / 2 / 0
Регистрация: 01.10.2010
Сообщений: 22
17.01.2011, 21:14  [ТС]     Функция которая возвращает динамический массив #4
м...ясно..спасибо, за ответы и пример.
но еще одно..а это не плохой тон выделять память в одном месте, а освобождать в другом?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 21:31     Функция которая возвращает динамический массив #5
gagarin0, хм... А что по-вашему, делает та же malloc? Мы создаём указатель, затем вызываем функцию... И оп-па, указатель уже указывает на область памяти. Но выделена-то она фактически была в функции malloc. А освобождаем мы её потом в, скажем, main'е. Так что все относительно)))
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.01.2011, 21:32     Функция которая возвращает динамический массив #6
Цитата Сообщение от gagarin0 Посмотреть сообщение
а это не плохой тон выделять память в одном месте, а освобождать в другом?
Да нет, обыкновенное дело... К примеру стандартная функция strdup() возвращает указатель на копию переданной ей строки, размещённую в динамической памяти...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2011, 13:46     Функция которая возвращает динамический массив
Еще ссылки по теме:

Функция, которая аннулирует двумерный динамический массив C++
Функция, которая возвращает массив C++
C++ Функция, которая только возвращает значение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gagarin0
2 / 2 / 0
Регистрация: 01.10.2010
Сообщений: 22
19.01.2011, 13:46  [ТС]     Функция которая возвращает динамический массив #7
Ясно... Спасибо за ответы!
Yandex
Объявления
19.01.2011, 13:46     Функция которая возвращает динамический массив
Ответ Создать тему
Опции темы

Текущее время: 21:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru