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

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

Войти
Регистрация
Восстановить пароль
 
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 115
#1

Не понятно куда девается значение по указателю? - C++

10.12.2012, 17:19. Просмотров 249. Ответов 7
Метки нет (Все метки)

Есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class base
{
int count*;
public:
    base(int _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new (k);
    b ->print();//здесь не  выводится  10 почему???
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не понятно куда девается значение по указателю? (C++):

Что и куда девается... - C++
Не очень хорошо знаю несколько вещей, а узнать хотелось бы очень. Вопрос 1. Локально объявленные переменные удаляются из памяти по...

Резкий выход из проги: куда девается выделенная переменной память? - C++
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int...

Узнать значение по указателю - C++
Пишу плагин для gta 3. В Cheat Engine я нашел нужный адрес, но он оказался динамическим.CE вычислил такой поинтер: Вопрос: как...

Pthread, поток, передающий значение по указателю - C++
Создаётся поток, передающий значение по указателю: pthread_create (&pthread_id1, NULL, my_thread,(void *)arr); pthread_create...

Не получается присвоить значение указателю на функцию - C++
В строке 26 говорит, что не может конвертировать тип. Что неправильно? #include "stdafx.h" #include <iostream> #include <conio.h> ...

Присвоить указателю значение, пример из интернета - C++
Добрый вечер. В интернете находил парочку таких примеров: 1.) int *x; cout<<*x; *x=100; 2.)

7
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
10.12.2012, 17:23 #2
Цитата Сообщение от dqrest Посмотреть сообщение
base(int _c) { count = &_c; }
C++
1
2
3
4
    base(int _c)
    {
       count = &_c;
    }
_c - это локальная переменная. Она будет уничтожена при выходе из функции. Поэтому count будет указывать уже на освобожденную память.
0
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.12.2012, 17:24 #3
Цитата Сообщение от dqrest Посмотреть сообщение
int count*;
Это что такое?
1
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
10.12.2012, 17:25 #4
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
#include <stdio.h>
 
using namespace std;
 
class base
{
int* count;
public:
    base(int _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base* b;
    b = new base(k);
    b ->print();//здесь выводится  10 )))
    return 0;
}
А вот так почему-то выводится

Добавлено через 34 секунды
Цитата Сообщение от David Sylva Посмотреть сообщение
Это что такое?
Я это у себя в коде исправил)
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 17:25 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
class base
{
int* count;
public:
    base(int& _c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new base(k);
    b ->print();
    return 0;
}
1
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
10.12.2012, 17:25 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class base
{
int * count;
public:
    base(int &_c)
    {
       count = &_c;
    }
    void print()
    {
        printf("\n count = %d", *count);
    }
};
int main()
{
    int k = 10;
    base * b = new base(k);
    b ->print();//здесь не  выводится  10 почему???
    return 0;
}
1
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.12.2012, 17:29 #7
dqrest кто тебя так научил, называть переменные int _c? Имена начинающиеся со знака подчёркивания, обычно резервируют для специальных средств реализации и сред выполнения, поэтому их не стоит использовать в обычных прикладных программах.
0
Kuzia domovenok
2055 / 1900 / 174
Регистрация: 25.03.2012
Сообщений: 6,538
Записей в блоге: 1
10.12.2012, 17:34 #8
да не должно у тебя это работать!!!
Это
Цитата Сообщение от sovaz1997 Посмотреть сообщение
base(int _c) { count = &_c;}
присваивает count адрес параметра c. Угадай, где в памяти расположен аргумент с? Правильно! В стеке вместе с локальными переменными. И он будет уничтожен после выхода из функции. Соответственно по его адресу будет что угодно, но не _с. Если хочешь присвоить count адрес переменной из функции main
(которая хоть и тоже локальная, но живёт она всё время выполнения программы.) Тогда тебе надо принимать в метод не копию этой переменной(у которой мало того что адрес отличный от оригинала, так она ещё и живёт только до выхода из base()) А надо принимать
C++
1
base(int* _c) { count = _c;}
0
10.12.2012, 17:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 17:34
Привет! Вот еще темы с ответами:

Как присвоить указателю значение другого указателя внутри процедуры? - C++
Подскажите пожалуйста. Вот я хочу одному указателю присвоить значение другого указателя внутри процедуры. Как это сделать ? Вот мой код. ...

Надо указателю на long int присвоить значение указателя на char - C++
//есть указатель unsigned char* p_to_char = somthing; //и указатель unsigned long int* p_to_int; //надо p_to_int присвоить...

ПРисвоить указателю нулевое значение- кк? с поммощщю каких знаков и действий? - C++
Пожалуста, обьясните принцип. Такого присвоения.

как i двигается понятно но вот не понятно как это делает j ? - C++
Здравствуйте, вопрос очень глупы но все же есть цикл for (int i = 0,j = 0; i &lt; source.length; i++) как i двигается понятно но вот не...


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

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

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