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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread782747.html
Здравствуйте. В книге "ООП" Р. Лафоре, в главе 6 есть программка. Которая не хочет запускаться. Сперва набирал сам, после "долгих мучений" решил запустить оригинальный код посмотреть или запуститься - увы. Запускал в CB и в VS. msoftcon.h и msoftcon.cpp файлы закинул в папку с проектом. Топ получился очень длинный, если модератор как-то сможет уменшить - буду благодарен : ( Вот сам код:...
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" с НЕ пересекающимися компонентами из f и g, то есть <2,3,6,6,7,7,7> 2B) создать упорядоченный бинарный файл "B.bin" c пересекающимися компонентами из f и g, то есть <1,4> 2С) создать упорядоченный... http://www.cyberforum.ru/cpp-beginners/thread782745.html
C++ Бинарные файлы ( Вывести на экран содержимое каждого файла)
Пользователь вводит 5 целых чисел. Положительные числа записать в файл "plus.bin", отрицательные - в "minus.bin". Закрыть эти файлы и снова открыть, но уже для чтения. Вывести на экран содержимое каждого файла. Помогите пж. написать код:))
Начальное значение для переменных-перечислений C++
enum {purchasing, selling, noAction} action; При таком объявлении, начальное значение action в 10 из 10 запусков - purchasing. Суть вопроса: Это закономерное поведение или всего лишь воля судьбы, а на самом деле Action - UB? И разрешена ли такая инициализация? enum {purchasing, selling, noAction} action = noAction; Добавлено через 1 час 44 минуты Эксперты С++, Вы где?
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 <string.h> подробнее

Показать сообщение отдельно
popelyuk
 Аватар для popelyuk
8 / 8 / 1
Регистрация: 04.12.2012
Сообщений: 130
09.02.2013, 20:21     При передаче ссылки на указатель программа зависает
Почему это не работает (точнее работает но зависает т.к. в 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru