Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
RAFA91
Заблокирован
1

Динамическая память

19.03.2015, 17:30. Просмотров 773. Ответов 23
Метки нет (Все метки)

Всем привет!!!

взникла проблема с выполнением строки K=A++;

при выполнении printf("\n__________ %d\n",K.gasaaa()); получаю левые числа вместо 6.

чувствую что проблема в Fasa operator ++ (int ff) или в копировщике.

Подскажите пожалуйста где я накосячил ??

________________________________________________


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {x=new int(5);}
 
    Fasa(int f) {x=new int(f);}
 
    ~Fasa() {delete x; x=0;}
 
    Fasa(Fasa &j) 
    
    {
        x=new int;
 
        *x=j.gasaaa();
    }
    
    int gasaaa() const {return *x;}
 
     Fasa & operator ++ ()
 
    {
        *x=(*x)++;
        
        return *this;
    }
 
     Fasa  operator ++ (int ff)
 
    {
        Fasa A(*this);
 
        *x=(*x)++;
 
        return A;
    }
};
 
int main()
 
{
     
    Fasa A,K;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
    
    K=++A;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
 
    K=A++;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
    
    getch();
 
    return 0;
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2015, 17:30
Ответы с готовыми решениями:

Статическая память,Динамическая память.
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть...

Динамическая память
Создать одномерный массив в котором хранятся года рождения людей (года вводятся...

Динамическая память с++
Как использовать динамическую память в с++

динамическая память....
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив...

Динамическая память
Надо ввести массив из файла. Сам массив хранится в динамической памяти. Сколько...

23
LaHaH
21 / 21 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
19.03.2015, 17:56 2
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

C++
1
K=A++;
При выполнении этой строчки, вызывается деструктор, который и удаляет Ваше значение x.

Происходит это из-за того, что Вы при перегрузке постфиксного ++ пытаетесь вернуть значение объекта А, который уничтожается после завершения кода перегрузки.
1
nonedark2008
1119 / 829 / 247
Регистрация: 28.07.2012
Сообщений: 2,325
19.03.2015, 18:03 3
Цитата Сообщение от RAFA91 Посмотреть сообщение
*x=(*x)++;
Чувствую, что попахивает неопределенным поведением...
0
RAFA91
Заблокирован
19.03.2015, 18:06  [ТС] 4
деструктор по идеи должен вызваться когда обьект А созданный в Fasa operator ++ (int ff) выйдет из области

видимости.

х обьекту К присвоенны адреса обьекта А созданного в Fasa operator ++ (int ff) или адреса тежи которые присвоил конструктор при создании обьекта К ?
0
RAFA91
Заблокирован
19.03.2015, 18:24  [ТС] 5
при выполнении кода K=++A; у меня x обьекта A и К имеет одинаковый адрес.

анализ провел так

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {x=new int(5);}
 
    Fasa(int f) {x=new int(f);}
 
    ~Fasa() {delete x; x=0;}
 
    Fasa(Fasa &j) 
    
    {
        x=new int;
 
        *x=j.gasaaa();
    }
    
    int gasaaa() const {printf("\n %p",x); return *x;}
 
     Fasa & operator ++ ()
 
    {
        *x=(*x)++;
        
        return *this;
    }
 
     Fasa  operator ++ (int ff)
 
    {
        Fasa A(*this);
 
        *x=(*x)++;
 
        return A;
    }
};
 
int main()
 
{
     
    Fasa A,K;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    K=++A;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    K=A++;
 
    printf("\n");
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    getch();
 
    return 0;
 
}
0
Миниатюры
Динамическая память  
LaHaH
21 / 21 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
19.03.2015, 18:25 6
Цитата Сообщение от RAFA91 Посмотреть сообщение
деструктор по идеи должен вызваться когда обьект А созданный в Fasa operator ++ (int ff) выйдет из области
видимости.
Код перегрузки оператора ++ закончился-вызываются деструкторы.

Проблема в том,как мне кажется, что А в Fasa operator ++ (int ff), уничтожается по завершении оператора ++ и только после этого, на верх передаются данные, которые к тому времени, представляют из себя мусор.
0
RAFA91
Заблокирован
19.03.2015, 18:32  [ТС] 7
при выполнении кода К=++А тоже не все так гладко у меня
0
Миниатюры
Динамическая память  
LaHaH
21 / 21 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
19.03.2015, 18:40 8
Хорошим решением данной проблемы, по моему мнению , будет встраивание в конструктор копирования и деструктор подсчет количества копий. Если счетчик равен нулю, то удаляем объект, если нет, то уменьшаем его на 1.
Соответственно при вызове конструктора копирования- увеличиваем счетчик на 1.
0
RAFA91
Заблокирован
19.03.2015, 18:46  [ТС] 9
даже не знаю. с дин. памятью много проблем.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
19.03.2015, 18:51 10
Цитата Сообщение от RAFA91 Посмотреть сообщение
с дин. памятью много проблем.
Вы просто не умеете её готовить.

Вам уже указали, *x=(*x)++; это UB.

Если не хочется вручную с памятью возиться - используйте smart pointer-ы. Хотя именно вам я бы рекомендовал сначала понять принцип работы с кучей.

Добавлено через 53 секунды
Не следуете правилу трёх - нет оператора присваивания.
Конструктор копий рекомендуется записывать как Obj(const Obj &)

Добавлено через 1 минуту
Цитата Сообщение от LaHaH Посмотреть сообщение
Хорошим решением данной проблемы, по моему мнению , будет встраивание в конструктор копирования и деструктор подсчет количества копий. Если счетчик равен нулю, то удаляем объект, если нет, то уменьшаем его на 1.
Соответственно при вызове конструктора копирования- увеличиваем счетчик на 1.
Подобный счётчик и удаление при количестве копий объекта = 0 уже зашито в std::shared_ptr.
0
RAFA91
Заблокирован
20.03.2015, 14:47  [ТС] 11
У меня созрело пару вопросов.

вначале у обьекта А и К х имеет следующие адреса

x А: 00330788

x K: 00330800

после выполнения

K=A

x А: 00330788

x K: 00330788

..................

куда делся адрес 00330800 ? утечка ?

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {printf("\nKONSTRUKTOR 1\n"); x=new int(5);}
 
    Fasa(int f) {printf("\nKONSTRUKTOR 2\n"); x=new int(f);}
 
    ~Fasa() {printf("\nDESTRUKTOR 1 %p\n",x); delete x; x=0;}
 
    Fasa(Fasa &j) 
    
    {
        x=new int;
 
        printf("\nKONSTRUKTOR KOPIR %p\n",x);
 
        *x=j.gasaaa();
    }
    
    int gasaaa() const {printf("\n %p",x); return *x;}
 
    void gaa(int v) {*x=v;}
 
     
};
 
int main()
 
{
     
    Fasa A,K;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    K=A;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    A.gaa(555);
    
    printf("\n");
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    getch();
 
    return 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int x;
 
public:
 
    Fasa()  {printf("\nKONSTRUKTOR 1\n"); x=5;}
 
    Fasa(int f) {printf("\nKONSTRUKTOR 2\n"); x=f;}
 
    ~Fasa() {printf("\nDESTRUKTOR\n");}
 
    Fasa(Fasa &j) 
    
    {
    
 
        printf("\nKONSTRUKTOR KOPIR\n");
 
    ;
    }
    
    int gasaaa() const {printf("\n %p",&x); return x;}
 
    void gaa(int v) {x=v;}
 
     
};
 
int main()
 
{
     
    Fasa A,K;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    K=A;
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    A.gaa(555);
    
    printf("\n");
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    getch();
 
    return 0;
 
}
0
Миниатюры
Динамическая память   Динамическая память  
pavel_pushok
30 / 30 / 9
Регистрация: 25.12.2014
Сообщений: 115
20.03.2015, 16:04 12
Цитата Сообщение от RAFA91 Посмотреть сообщение
Fasa(Fasa &j)
{
* * * * x=new int;
printf("\nKONSTRUKTOR KOPIR %p\n",x);
*x=j.gasaaa();
* * }
Этот конструктор будет вызван только в случае, если вы задаете в параметрах другой класс.
C++
1
Fasa A,K(A);
Добавлено через 5 минут
Цитата Сообщение от RAFA91 Посмотреть сообщение
куда делся адрес 00330800 ? утечка ?
чтобы этого не было, достаточно перегрузить оператор =
C++
1
2
3
4
5
    Fasa& operator = (Fasa &j)
    {
        *x = j.gasaaa();
        return *this;
    }
0
RAFA91
Заблокирован
20.03.2015, 16:52  [ТС] 13
Цитата Сообщение от pavel_pushok Посмотреть сообщение
чтобы этого не было, достаточно перегрузить оператор =
примерно так и сделал

операцию K=++A заменил на ++А K=A

операцию K=A++ заменил на K=A ++А

ДРУГОГО решения не наю.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {printf("\nKONSTRUCTOR 1\n"); x=new int(5);}
 
    Fasa(int f) {printf("\nKONSTRUCTOR 2\n"); x=new int(f);}
 
    ~Fasa() {printf("\nDESTRUCTOR %p\n",x); delete x; x=0;}
 
    //Fasa(Fasa &j) {}
    
    int gasaaa() const {printf("\n %p",x); return *x;}
 
    void gaa(int v) {*x=v;}
 
     Fasa & operator ++ ()
 
    {
        *x=(*x)++;
        
        return *this;
    }
 
     
     Fasa & operator = (const Fasa & D)
 
    {
        
        if(this == &D) return *this;
        
        *x=D.gasaaa();
 
        return *this;
     
     }
};
 
int main()
 
{
     
    Fasa A,K;
 
    
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    K=A;   // аналог K=A++; 
 
    A++;   // 
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    A.gaa(555);
 
    A++;  // аналог K=++A; 
 
    K=A;  // 
 
    printf("\n");
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    getch();
 
    return 0;
 
}
Добавлено через 43 минуты
столкнулся исче с одной проблемой.

например есть обьекты Fasa A,K,B; надо сложить А+К и присвоить В.

решил сделать через собственную функцию void add (const Fasa & D, const Fasa & K)

так как не знаю как сделать с помощью оператора .

может кто знает. ?

___________________________

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {printf("\nKONSTRUCTOR 1\n"); x=new int(5);}
 
    Fasa(int f) {printf("\nKONSTRUCTOR 2\n"); x=new int(f);}
 
    ~Fasa() {printf("\nDESTRUCTOR %p\n",x); delete x; x=0;}
 
    //Fasa(Fasa &j) {}
    
    int gasaaa() const {printf("\n %p",x); return *x;}
 
    void gaa(int v) {*x=v;}
 
     Fasa & operator ++ ()
 
    {
        *x=(*x)++;
        
        return *this;
    }
 
     
     Fasa & operator = (const Fasa & D)
 
    {
        
        if(this == &D) return *this;
        
        *x=D.gasaaa();
 
        return *this;
     
     }
 
     void add (const Fasa & D, const Fasa & K)
 
     {
         *x = D.gasaaa()+K.gasaaa();
     }
};
 
int main()
 
{
     
    Fasa A,K,B;
 
    //printf("__________ %p %p %p\n",&A,&K,&B);
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
    
    K=A;   // аналог K=A++; 
 
    A++;   // 
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    A.gaa(555);
 
    A++;  // аналог K=++A; 
 
    K=A;  // 
 
    printf("\n");
 
    printf("__________ %d\n",A.gasaaa());
    
    printf("__________ %d\n",K.gasaaa());
 
    B.add(A,K);
 
    printf("__________ PPP %d\n",B.gasaaa());
    
    getch();
 
    return 0;
 
}
0
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
20.03.2015, 17:18 14
RAFA91, исправил все ошибки, добавил оператор.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <conio.h>
 
class Fasa
{
    int *x;
 
public:
    Fasa()
        : x(new int())
    { }
    Fasa(int f)
        : x(new int(f))
    { }
    ~Fasa()
    {
        delete x;
    }
    Fasa(Fasa const & j)
        : x(new int(*j.x))
    {}
    int gasaaa() const
    {
        return *x;
    }
    void gaa(int v)
    {
        *x = v;
    }
    Fasa & operator++()
    {
        ++*x;
        return *this;
    }
    Fasa operator++(int)
    {
        Fasa tmp(*this);
        ++*x;
        return tmp;
    }
    Fasa & operator=(Fasa const & j)
    {
        if(this != &j)
        {
            *x = *j.x;
        }
        return *this;
    }
    Fasa operator+(Fasa const & a) const
    {
        return Fasa(*x + *a.x);
    }
};
 
int main()
{
 
    Fasa A(3), K(4), B;
 
    B = A + K;
 
    printf("A + K = %d\n", B.gasaaa());
 
    getch();
 
    return 0;
}
0
RAFA91
Заблокирован
20.03.2015, 18:52  [ТС] 15
спасибо большое.

в строке x(new int(*j.x)) значение адреса x как я понял меняется ?

а куда уплыли старые адреса при вызове конструктора ?

Добавлено через 24 минуты
ПРОАНАЛИЗИРОВАЛ Вашу программу таким варварским методом и увидел , что конструктор копировщик ни разу не вызывался.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <conio.h>
 
class Fasa
{
    int *x;
 
public:
    
    Fasa()
        : x(new int(66))
    { printf("\n KONSTR 1 %p\n",x);}
    
    Fasa(int f)
        : x(new int(f))
    {printf("\n KONSTR 2 %p\n",x); }
    ~Fasa()
    {
         printf("\n DESTR %p\n",x);
        
        delete x;
    }
    
    Fasa(Fasa const & j)
        
        :  x(new int(*j.x))
    
    {printf("\n KONSTR copir \n");}
    
    
    
    int gasaaa() const
    {
        printf ("__________ %p",x); 
        
        return *x;
    }
    void gaa(int v)
    {
        *x = v;
    }
    
    //Fasa & operator++()
    //{
        //++*x;
        //return *this;
    //}
    //Fasa operator++(int)
    //{
       // Fasa tmp(*this);
        //++*x;
        //return tmp;
    //}
    Fasa & operator=(Fasa const & j)
    {
        printf("\n\n==================\n\n");
 
       if(this != &j)
        {
            *x = *j.x;
        }
        return *this;
    }
    Fasa operator+(Fasa const & a) const
    {
        printf("\n\n+++++++++++++++++++ %p %p\n\n",this,& a);
        
        return Fasa(*x + *a.x);
    }
};
 
int main()
{
 
    Fasa A(3), K(4), B;
 
    printf("\n\n%p %p %p\n\n",&A,&K,&B);
 
    B = A + K;
 
    printf("___________ %d\n\n", A.gasaaa());
 
    printf("___________ %d\n\n", K.gasaaa());
 
    printf("___________ %d\n\n", B.gasaaa());
 
    getch();
 
    return 0;
}
0
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
20.03.2015, 19:02 16
Цитата Сообщение от RAFA91 Посмотреть сообщение
а куда уплыли старые адреса при вызове конструктора ?
Не очень понятно о чем ты.
В чем проблема-то?

Добавлено через 56 секунд
Цитата Сообщение от RAFA91 Посмотреть сообщение
в строке x(new int(*j.x)) значение адреса x как я понял меняется ?
Инициализируется. До этого у х не было вообще никакого значения.
0
RAFA91
Заблокирован
21.03.2015, 14:22  [ТС] 17
ваш вариант работает прекрасно но хочу уточнить детали для себя на примере этой программы.

есть такая функция

C++
1
2
3
4
5
6
7
8
9
Nasa faga()
 
    {
        Nasa A;
 
A. fffff(666);
        
        return A;
    }
Добавлено через 7 минут
в главной функции делаю это V=faga();

копировщик делаю свой

Nasa(const Nasa & basa)

{
// x=basa.fada();
}

когда снимаю // то получаю бред. почему так ? зачем надо копировать ?

зачем при выходе из Nasa faga() вызывается копировщик ?

что обьект А функции Nasa faga() выходит за область видимости раньше, чем возвратится

обьект А функции Nasa faga() обьекту V функции main() ???
0
RAFA91
Заблокирован
21.03.2015, 14:51  [ТС] 18
вот полный код.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <conio.h>
 
 
class Nasa
 
{
    int x;
 
public:
 
    int fada() const {printf("\n________ %p",&x); return x;}
 
    void fffff(int d) {x=d;}
 
    Nasa() : x(122) {printf("\nkonst  %p\n",& x);}
 
    ~Nasa() {printf("\ndest  %p\n",& x);}
    
    Nasa(const Nasa & basa) 
    
    {
//      x=basa.fada();
        
//      printf("\nkonst kop %p %p\n",& basa,&x);
    }
};
 
Nasa faga();
 
 
int main()
 
{
    Nasa V;
 
    printf(" ****** %d\n",V.fada());
 
    V=faga();
 
    printf(" ****** %d\n",V.fada());
 
    
 
    getch();
 
    
return 0;
 
 
}
 
Nasa faga()
 
    {
        Nasa A;
 
        printf("\nadress %p\n",&A);
 
        A. fffff(666);
        
        return A;
    }
а вот результат

что это за адрес ? компилятор сам эго назначил ?

может это тот самый адрес ячейки в которую мне надо что-то скорировать ?
0
Миниатюры
Динамическая память  
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
21.03.2015, 16:16 19
Цитата Сообщение от RAFA91 Посмотреть сообщение
зачем при выходе из Nasa faga() вызывается копировщик ?
Объект А - локальный для функции (т.е. принадлежит ее области видимости). Чтобы передать его во внешний мир - нужно скопировать. Т.е. правилами языка это предусмотрено. Но оптимизирующий компилятор в таких случаях может по факту выкидывать это копирование (читай про RVO, NRVO).

Цитата Сообщение от RAFA91 Посмотреть сообщение
когда снимаю // то получаю бред.
В каком смысле бред?

Цитата Сообщение от RAFA91 Посмотреть сообщение
что это за адрес ? компилятор сам эго назначил ?
Это адрес временного объекта, который создается при возврате из функции. В большинстве случаев компилятор не будет его создавать, если включена оптимизация (ты скорее всего cобираешь в режиме Debug).
0
RAFA91
Заблокирован
21.03.2015, 19:10  [ТС] 20
под бредом я имел ввиду число -85899........

_______________________________________________

немного начал понимать суть.

скажите пожалуйста, а этот временной обьект куда я копирую данные ,

когда исчезнит?
0
21.03.2015, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2015, 19:10

Динамическая память
Народ, если кому не сложно помогите переделать вот эту программу со структурами...

Динамическая память
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std;...

Динамическая память
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ;...


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

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

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