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

При передаче ссылки на указатель программа зависает - C++

Восстановить пароль Регистрация
 
popelyuk
 Аватар для popelyuk
8 / 8 / 1
Регистрация: 04.12.2012
Сообщений: 130
09.02.2013, 20:21     При передаче ссылки на указатель программа зависает #1
Почему это не работает (точнее работает но зависает т.к. в set_val_to23() ссылка на указатель val передаётся со значением 0:

main():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void set_val_to23(int* &val) {
    *val=23;
}
 
int main() {
    try {
        cml::auto_ptr<int> k=new int(72);
        std::cout<<*k<<std::endl;
        set_val_to23(k.set());
        std::cout<<*k<<std::endl;
    }
    catch(cml::exception err) {
        o("\n");
        o(err.what());
    }
    return 0;
}
auto_ptr:
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
template <typename ptr_type>
class auto_ptr {
    struct ptr_case {
        ptr_type *ptr;
        UINT use_counter;
        ptr_case(ptr_type *in_ptr) :ptr(in_ptr), use_counter(1) {}
        ~ptr_case() { delete ptr; }
    };
public:
    auto_ptr(ptr_type *in_ptr=0);
    ~auto_ptr();
    auto_ptr(const auto_ptr &in_obj);
    auto_ptr & operator =(const auto_ptr &in_obj);
    auto_ptr & operator =(ptr_type *in_ptr);
    ptr_type* &set();   // <<========================= вот эта функция почему она не работает?
    ptr_type * operator ->() const;
    ptr_type & operator *() const;
    operator ptr_type*() const;
    ptr_type* release();
    bool operator ==(const auto_ptr &in_obj) const;
    bool operator !=(const auto_ptr &in_obj) const;
    bool operator ==(const ptr_type *in_ptr) const;
    bool operator !=(const ptr_type *in_ptr) const;
    template <typename _ptr_type> friend
    bool operator==(const _ptr_type *in_ptr, const auto_ptr<_ptr_type> &in_obj);
    template <typename _ptr_type> friend
    bool operator!=(const ptr_type *in_ptr, const auto_ptr<_ptr_type> &in_obj);
private:
    ptr_case *pointer;
};
 
template <typename ptr_type>
ptr_type* &auto_ptr<ptr_type>::set() {
    pointer->ptr=0;
    if(pointer->use_counter==1) delete pointer;
    else pointer->use_counter--;
    pointer=new ptr_case(0);
    return pointer->ptr;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 20:21     При передаче ссылки на указатель программа зависает
Посмотрите здесь:

C++ Указатели и ссылки. Имя массива как указатель
C++ Программа зависает при очищении памяти
C++ Ошибка при передаче структуры
C++ Программа зависает при загрузке файла
C++ Возвращение ссылки на указатель использование её как левостороннего значения
C++ Ошибка при передаче в функцию
Программа зависает при вводе значения b C++
Теряется строка при передаче в функцию C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.02.2013, 21:25     При передаче ссылки на указатель программа зависает #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
потому что
Цитата Сообщение от popelyuk Посмотреть сообщение
C++
1
pointer->ptr=0;
Цитата Сообщение от popelyuk Посмотреть сообщение
C++
1
pointer=new ptr_case(0);
popelyuk
 Аватар для popelyuk
8 / 8 / 1
Регистрация: 04.12.2012
Сообщений: 130
09.02.2013, 21:31  [ТС]     При передаче ссылки на указатель программа зависает #3
точно блин, вот я кретин, вот так вот копировать код из других методов...
Yandex
Объявления
09.02.2013, 21:31     При передаче ссылки на указатель программа зависает
Ответ Создать тему
Опции темы

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