Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
gagarin0
2 / 2 / 1
Регистрация: 01.10.2010
Сообщений: 22
#1

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

17.01.2011, 14:17. Просмотров 5318. Ответов 6
Метки нет (Все метки)

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

Функция, что возвращает динамический массив
Функция возвращает динамический массив int *A1 (BYTE val) { int *mass =...

Шаблонная функция с явной специализацией не возвращает динамический массив
Здравствуйте! Возникла проблема! Есть шаблонная функция с явной...

Функция, которая возвращает массив
Здравствуйте. Подскажите, пожалуйста, как правильно написать код - есть...

Функция, которая возвращает массив
Как сделать так чтобы функция возвращала указатель на рандомно сгенерированный ...

Функция, которая аннулирует двумерный динамический массив
Здравствуйте! Подскажите пожалуйста функцию которая аннулирует двумерный...

Функция, которая копирует двумерный динамический массив
Здравствуйте, нужна помощь, суть задания в том , что бы с помощью шаблона...

6
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
17.01.2011, 14:26 #2
Вы можете выделить память в одной функции, а освободить их в другой. Память ведь выделяется в куче, а работаете вы с ней через указатель на начало этой памяти. Значит, тягать этот указатель вы можете как захотите, потом с помощью него выделенную в одном месте память можно освободить в другом.
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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;
}
3
gagarin0
2 / 2 / 1
Регистрация: 01.10.2010
Сообщений: 22
17.01.2011, 21:14  [ТС] #4
м...ясно..спасибо, за ответы и пример.
но еще одно..а это не плохой тон выделять память в одном месте, а освобождать в другом?
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
17.01.2011, 21:31 #5
gagarin0, хм... А что по-вашему, делает та же malloc? Мы создаём указатель, затем вызываем функцию... И оп-па, указатель уже указывает на область памяти. Но выделена-то она фактически была в функции malloc. А освобождаем мы её потом в, скажем, main'е. Так что все относительно)))
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
17.01.2011, 21:32 #6
Цитата Сообщение от gagarin0 Посмотреть сообщение
а это не плохой тон выделять память в одном месте, а освобождать в другом?
Да нет, обыкновенное дело... К примеру стандартная функция strdup() возвращает указатель на копию переданной ей строки, размещённую в динамической памяти...
0
gagarin0
2 / 2 / 1
Регистрация: 01.10.2010
Сообщений: 22
19.01.2011, 13:46  [ТС] #7
Ясно... Спасибо за ответы!
0
19.01.2011, 13:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2011, 13:46
Привет! Вот еще темы с решениями:

Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432)
Вот мое решение, подскажите, пожалуйста, что изменить, чтобы заработала...

Создать функцию, которая возвращает массив в обратном порядке. Именно возвращает
Не могу никак создать функцию.

Функция которая возвращает класс
Есть функция считывания вектора с формы Вызов функции выглядит так ...

Функция, которая возвращает несколько значений
как &quot;забрать&quot; у функции несколько значений? допустим: int func( int x,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru