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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread782747.html
Здравствуйте. В книге "ООП" Р. Лафоре, в главе 6 есть программка. Которая не хочет запускаться. Сперва набирал сам, после "долгих мучений" решил запустить оригинальный код посмотреть или запуститься...
C++ Бинарные файлы 2) Даны упорядоченные бинарные файлы "f.bin" и "g.bin", содержащие целые числа типа int. Например, f = <1,1,2,4,4,4,5> g = <1,1,3,4,6,6,7,7,7> 2A) создать упорядоченный бинарный файл "A.bin" с НЕ... http://www.cyberforum.ru/cpp-beginners/thread782745.html
C++ Бинарные файлы ( Вывести на экран содержимое каждого файла)
Пользователь вводит 5 целых чисел. Положительные числа записать в файл "plus.bin", отрицательные - в "minus.bin". Закрыть эти файлы и снова открыть, но уже для чтения. Вывести на экран содержимое...
Начальное значение для переменных-перечислений C++
enum {purchasing, selling, noAction} action; При таком объявлении, начальное значение action в 10 из 10 запусков - purchasing. Суть вопроса: Это закономерное поведение или всего лишь воля судьбы, а...
C++ Не происходит замена в двумерном массиве http://www.cyberforum.ru/cpp-beginners/thread782739.html
Не могу произвести замену цифр,с 0 1 2 на a b c; Подскажите в чем ошибка? #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int main(){
C++ Как вывести содержимое в TextBox? Visual Studio 2010, Visual C++. Имеется такой код для вычисления хэша SHA-1 #define UNICODE #include <stdio.h> #include <conio.h> #include <Windows.h> #include <WinCrypt.h> #include... подробнее

Показать сообщение отдельно
popelyuk
8 / 8 / 1
Регистрация: 04.12.2012
Сообщений: 130

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

09.02.2013, 20:21. Просмотров 319. Ответов 2
Метки (Все метки)

Почему это не работает (точнее работает но зависает т.к. в 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.