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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.59
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
#1

Возврат указателя на массив из функции - C++

06.08.2010, 12:48. Просмотров 5041. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Пытаюсь вернуть указатель на массив из функции.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
 
int* ReturnArray()
{
    int a[5] = {7,3,4,5,2};
    return a;
}
 
int main()
{
    int *x = ReturnArray();
    for(int z = 0; z < 5; z++)
        cout << *(x++) << endl;
    system ("pause");
    return 0;
}
Но выводится совершенно не то, что ожидалось, т.е. не 7 3 4 5 2, а 7 1244788 273393478 273992392 273992392(как видно, первый элемент массива правильный, а потом каша)

Проводил трассировку, сравнивал адреса элементов массива в памяти(как и положено для int со сдвигом на 4 байта) - адреса совпадают. Но вот значения, лежащие по этим адресам в главной функции и в функции ReturnArray разные. Интересует почему так.

Спасибо


UPD. Все, разобрался, надо было сообщения компилятора читать. И хоть чуть-чуть головой подумать
warning C4172: returning address of local variable or temporary
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возврат указателя на массив из функции (C++):

Возврат указателя на массив из функции - C++
День добрый, коллеги по цеху. Не откажите в нужде java программисту в познаниях нативного кода. Запутался я совсем в указателях. Как...

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

Возврат указателя - C++
Написать функцию возвращающую ссылку на элемент глобального массива. #include &lt;stdio&gt; #include &lt;conio&gt; #include &lt;iostream&gt; ...

Возврат функцией указателя на функцию - C++
Всем привет! У меня возникла такая проблема: класс имеет поле-указатель на функцию. В методе, который осуществляет доступ к этуму полю,...

Возврат указателя на строку из фукнции - C++
Снова я пришел к вам со строками. Читаю &quot;Как программировать на С++&quot; и там везде пишут про инкапсуляцию, сокрытие данных. Так чтоб мы...

Возврат указателя на локальный объект - C++
Доброго дня! Заинтересовал процесс возврата указателя на локальный объек, а именно: char* fun() { char *ptr1 = &quot;Hello world!&quot;; ...

4
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
06.08.2010, 12:55 #2
если вы хотите именно такую форму записи, то попробуйте объявить массив в функции, как static.

а вообще все локальные переменные имеют свое время жизни, в вашем случае массив удаляется из памяти к моменту выхода из функции.
0
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
06.08.2010, 12:57  [ТС] #3
Цитата Сообщение от fasked Посмотреть сообщение
если вы хотите именно такую форму записи, то попробуйте объявить массив в функции, как static.

а вообще все локальные переменные имеют свое время жизни, в вашем случае массив удаляется из памяти к моменту выхода из функции.
Спасибо, разобрался сам только как запостил на форум
0
Demihalf
Унылый школьник
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
06.08.2010, 14:23 #4
fasked, а не лучше ли будет выделять память в куче?..
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
06.08.2010, 15:09 #5
Цитата Сообщение от Demihalf Посмотреть сообщение
а не лучше ли будет выделять память в куче?..
зависит от случая.
статический массив только один. соответственно, если есть необходимость, чтобы возвращаемый указатель указывал на разные объекты, то статические массивы не подойдут. если такой необходимости нет, то я предпочел бы статику. лишние беспокойства об утечках никому не нужны.
1
06.08.2010, 15:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2010, 15:09
Привет! Вот еще темы с ответами:

Возвращения указателя на массив из функции - C++
Как возвратитьуказатель на массив из функции в другую функцию и потом воспользоаваться этим массивом? #include &quot;stdafx.h&quot; ...

Visual c++ возврат указателя, return *char - C++
есть класс journal, Я передаю в char *name значение &quot;gfg&quot;, а возвращает от мне заименнованное значение name, только первый символ &quot;f&quot;. ...

Происхродит ли здесь возврат указателя на не действительную память? - C++
double *Gaus(double **Matix, double *Frees, int N) { double **DownRow; double *DownFree; int i; double **UpnRow; double...

Возврат 2 значений из функции с одним вызовом этой же функции - C++
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int arg3); суть в чем int...


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

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

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