Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
gagarin0
2 / 2 / 0
Регистрация: 01.10.2010
Сообщений: 22
#1

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

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

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

Функция, что возвращает динамический массив - C++
Функция возвращает динамический массив int *A1 (BYTE val) { int *mass = new int; //инициализация массива return mass; }...

Шаблонная функция с явной специализацией не возвращает динамический массив - C++
Здравствуйте! Возникла проблема! Есть шаблонная функция с явной специализацией для строк (тип char*), которая должна возвратить...

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

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

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

Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432) - C++
Вот мое решение, подскажите, пожалуйста, что изменить, чтобы заработала программа: # include <iostream> # include <stdlib.h> #...

6
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.01.2011, 14:26 #2
Вы можете выделить память в одной функции, а освободить их в другой. Память ведь выделяется в куче, а работаете вы с ней через указатель на начало этой памяти. Значит, тягать этот указатель вы можете как захотите, потом с помощью него выделенную в одном месте память можно освободить в другом.
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
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 / 0
Регистрация: 01.10.2010
Сообщений: 22
17.01.2011, 21:14  [ТС] #4
м...ясно..спасибо, за ответы и пример.
но еще одно..а это не плохой тон выделять память в одном месте, а освобождать в другом?
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.01.2011, 21:31 #5
gagarin0, хм... А что по-вашему, делает та же malloc? Мы создаём указатель, затем вызываем функцию... И оп-па, указатель уже указывает на область памяти. Но выделена-то она фактически была в функции malloc. А освобождаем мы её потом в, скажем, main'е. Так что все относительно)))
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
17.01.2011, 21:32 #6
Цитата Сообщение от gagarin0 Посмотреть сообщение
а это не плохой тон выделять память в одном месте, а освобождать в другом?
Да нет, обыкновенное дело... К примеру стандартная функция strdup() возвращает указатель на копию переданной ей строки, размещённую в динамической памяти...
0
gagarin0
2 / 2 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

Функция которая возвращает класс - C++
Есть функция считывания вектора с формы Вызов функции выглядит так Vector1.GetVector(GridOfVector1); CVector...

Функция, которая только возвращает значение - C++
Как реализовать функцию, которая только возвращает значение. Вот, например: #include &quot;stdafx.h&quot; #include &lt;locale&gt; #include &lt;iostream&gt;...

Функция, которая возвращает количество её вызовов - C++
Напишите функцию, которая возвращает количество её вызовов (вызвали в первый раз - возвращает 1, второй раз - 2 и т.д.).

Функция, которая возвращает требуемое значение - C++
Дан одномерный массив из n чисел. Элементами массива являются случайные целые числа от -10 до 10 включительно. Напишите функцию, которая...


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

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

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