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

Объясните что не так с указателем в программе - C++

Восстановить пароль Регистрация
 
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
07.01.2013, 20:11     Объясните что не так с указателем в программе #1
Функция defStart возвращает указатель на int . В main другой указатель присваивает значение(адрес) возвращенного указателя. Затем в цикле вывожу значения используя нотацию массива
C++
1
 cout<<result[i]<<" ";
И Вместо
1 0 0 0 в консоль выводит 1 9083459837 9083409587340 0983459839487 . Зато если я вывожу вот так
C++
1
cout<<*result<<" ";
, то получаю ожидаемый результат 1 0 0 0 . Объясните почему так ? Ведь я не
инкрементирую указатель при выводе вторым способом и почему при нотации массива получается какая то билиберда .

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
#include<iostream>
using namespace std;
 
int * defStart(int x,int y)
   {
       int vector[4]={0,0,0,0};
       if(x==0)
       {vector[3]=1;}//направление вниз
       else if(x==11)
       {vector[2]=1;}//направление вверх
       if(y==0)
       {vector[0]=1;}//направление вправо
       else if(y==11)
       {vector[1]=1;}//направление влево
 
       return vector;
   }
 
int main()
{
    int *result=defStart(2,0);
    for(int i=0;i<=3;i++)
       {
           cout<<*result<<" ";
       }
    cout<<endl;
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
07.01.2013, 20:37     Объясните что не так с указателем в программе #2
Это потому, что не надо возвращать указатели на локальные переменные, они живут лишь до выхода из функции(области видимости в общем случае).
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 20:41     Объясните что не так с указателем в программе #3
вообще возвращается указатель на объект, который тут же умирает при выходе из функции defStart.
так что поведение вообще неопределено. может выводится что угодно. чтобы понять, почему на разных итерациях выводятся разные значения нужно копаться в дизассемблере. можно предположить что память, где раньше находился вектор по мере вызова функции "cout<<*result<<" ";" перезаписывается по всякому (внутри ведь наверняка используются переменные, которые что-то со стеком делают).
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
07.01.2013, 20:46  [ТС]     Объясните что не так с указателем в программе #4
Thanks everybody всем помогавшим , Вы правы .
Yandex
Объявления
07.01.2013, 20:46     Объясните что не так с указателем в программе
Ответ Создать тему
Опции темы

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