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

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

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

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

06.08.2010, 12:48. Просмотров 4839. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 12:48     Возврат указателя на массив из функции
Посмотрите здесь:

Возврат указателя на массив из функции - 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;; ...

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

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

а вообще все локальные переменные имеют свое время жизни, в вашем случае массив удаляется из памяти к моменту выхода из функции.
Спасибо, разобрался сам только как запостил на форум
Demihalf
Унылый школьник
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
06.08.2010, 14:23     Возврат указателя на массив из функции #4
fasked, а не лучше ли будет выделять память в куче?..
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...

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

Возврат массива из функции - C++
Здравствуйте. Не могу разобраться, почему при передачи массива из функции но не правильно передаётся. Вот результат.


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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
06.08.2010, 15:09     Возврат указателя на массив из функции #5
Цитата Сообщение от Demihalf Посмотреть сообщение
а не лучше ли будет выделять память в куче?..
зависит от случая.
статический массив только один. соответственно, если есть необходимость, чтобы возвращаемый указатель указывал на разные объекты, то статические массивы не подойдут. если такой необходимости нет, то я предпочел бы статику. лишние беспокойства об утечках никому не нужны.
Yandex
Объявления
06.08.2010, 15:09     Возврат указателя на массив из функции
Ответ Создать тему
Опции темы

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