Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Занулить значение по ссылке 
V
    Опции темы
Rickert
Дата 3.7.2007, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Дело такое:
Код
int* t = new int;
*t = 124;
int* s = t;

К t доступа нет ни в каком виде. Есть только s, которая является такой же ссылкой, как и t.
Вопрос: как мне занулить значение указателя t?
То бишь, чтобы t = 0x0000 ?

Добавлено @ 05:51
Ведь если я укажу
Код
s = 0

t - так и останется прежним.

Это сообщение отредактировал(а) Rickert - 3.7.2007, 08:06


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MaXL
Дата 3.7.2007, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



Если доступ есть только к s то скорее всего ни как. Т.к. это отдельный указатель и с помощью него ты можешь повлиять только на данные находящиеся по адресу, на который соответственно указывается этот указатель, или изменить адрес, но тоже только этого указателя. Поэтому ни как.


--------------------
MaXL
PM MAIL   Вверх
Rickert
Дата 3.7.2007, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



MaXL, стопудов можно. Давно было дело - делал, но хоть убей не помню как.
Или меня тогда переглючило?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
W4FhLF
Дата 3.7.2007, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Rickert @  3.7.2007,  05:49 Найти цитируемый пост)
К t доступа нет ни в каком виде. Есть только s, которая является такой же ссылкой, как и t.


Так ссылкой или указателем? Это здесь очень важно smile 
В примере s указатель, под него выделяется отдельный участок памяти и имея доступ только к s ты к t никак не подберёшься. Если я правильно понял суть конечно. 


Это сообщение отредактировал(а) W4FhLF - 3.7.2007, 06:10


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
apook
Дата 3.7.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(W4FhLF @  3.7.2007,  06:10 Найти цитируемый пост)
s ты к t никак не подберёшься.

но ведь s туда же указывает что и t значит через s можно менять то что там находится поидее...
например так прекрасно работает:
Код

#include<stdio.h> 
#include<conio.h>


int main()
{

int *t = new int;
t[ 0 ] = 124;
int *s = t;

s[ 0 ]=0x0000;

printf( "%d", t[ 0 ] );
getch();
return 0;
}

или вопрос неточно задан




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
MaXL
Дата 3.7.2007, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



apook, ты в своём примере зануляешь значение по этому указателю, а нужно менять адрес, на который указывает указатель.
Код

То бишь, чтобы t = 0x0000 ?

вопрос задан точно.


--------------------
MaXL
PM MAIL   Вверх
apook
Дата 3.7.2007, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



ааа понял тада ето что то хитрое, походу точно нельзя если только туда переместить кусок
памяти с другого адреса типа гора к Mагомету smile 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 3.7.2007, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
int* t = new int;
t = 124;

начнем с  того, что выделенная в первой строчке память потеряна навсегда. 
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
которая является такой же ссылкой, как и t.

ссылок тут нет вообще, здесь указатели
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
Вопрос: как мне занулить значение указателя t?
То бишь, чтобы t = 0x0000 ?

если интересует именно значение указателя, то "занулить" его в таком случае никак нельзя, кроме как t=0.
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
t - так и останется прежним. 

ага
PM MAIL WWW   Вверх
apook
Дата 3.7.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



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


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 3.7.2007, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(apook @  3.7.2007,  08:14 Найти цитируемый пост)
Слушай а сама переменная t где хранится ее адрес.. а не куда она указывает

ты фиг найдешь, где эта переменная находится. даже если взять самый простой случай, когда t и  s объявлены одна за одной в функции. тогда изначально нет проблемы "занулить" саму t, да и потом адресс её найти относительно s на 100% точно нельзя.
PM MAIL WWW   Вверх
Rickert
Дата 3.7.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Прошу прощения за каламбур: тут везде указатели, а не ссылки.
Цитата(Daevaorn @  3.7.2007,  07:04 Найти цитируемый пост)
начнем с  того, что выделенная в первой строчке память потеряна навсегда. 

Всмысле? Почему потеряна?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 3.7.2007, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Rickert @  3.7.2007,  08:56 Найти цитируемый пост)
Всмысле? Почему потеряна?

потомучто ты поменял значение указателя, он терь указывает непойми куда
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
t = 124;




--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 3.7.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



vinter, пардон, там, есесно стоит *t = 124


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 3.7.2007, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а почему бы напрямую не занулить t? и вообще какой тебе смысл в простом занулении? освободи просто память и все


--------------------
Мой блог
PM MAIL WWW   Вверх
zkv
Дата 3.7.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Rickert @  3.7.2007,  06:09 Найти цитируемый пост)
стопудов можно. Давно было дело - делал, но хоть убей не помню как.
Или меня тогда переглючило?

можно так:
Код

    int* t = new int;
    *t = 124;

    int** s = &t;
    *s = 0;

или так:
Код

    int* t = new int;
    *t = 124;
    int*& s = t;
    s = 0;

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.