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

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

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

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

06.08.2010, 12:48. Просмотров 4733. Ответов 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++ Возврат ссылки из функции
C++ Возврат указателя на строку из фукнции
C++ Возврат функцией указателя на функцию
C++ Происхродит ли здесь возврат указателя на не действительную память?
C++ Возврат указателя
Возврат указателя на массив указателей C++
Возврат итератора из функции C++
Возврат 2 значений из функции с одним вызовом этой же функции C++
Возврат boost::any из функции C++
C++ Возврат массива из функции
Возврат указателя на массив из функции C++
C++ Возврат указателя на локальный объект

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

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

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