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

Делаю Memory Manager Array с простым (int) exception последний элемент чудит - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ "Плейсхолдер" (placeholder) http://www.cyberforum.ru/cpp-beginners/thread630846.html
"Плейсхолдер" (переводится как прототип или заполнитель ?) - так говорят многие участники на этом форуме, объясните пожалуйста, что это такое ?? поисковик выдал мне много всего от хабра с html5 до как лечить удава. Ребят, еще вопрос у меня в теме по Си )) про signal.h, помогите разобраться ))
C++ Рисование ASCII кодами и русский текст в консоли Всем добрый вечер. И вот такой вопрос есть. Сначала печатаю в консоли текст а под ним горизонтальную линию. Только вместо линии получаются каракули. Уже по разному пробовал, шрифты менял и ничего не помогает. Получается или текс по-русски а вместо линии непонятно что, или линия нормальная а вместо текста абракадабра. Как это можно одновременно сделать? #include <iostream> #include <windows.h>... http://www.cyberforum.ru/cpp-beginners/thread630821.html
C++ Составить программу для вычисления количества цифр среди элементов списка.
Тема: Динамические структуры данных. Линейные списки. Дан список А, состоящий из записей: первое поле – символ, второе – адрес следующего элемента. Составить программу для вычисления количества цифр среди элементов списка.
C++ Запуск программ на других компах
Всем привет, вообщем перерыл весь интернет, как запускать скомпилированную программу на разных компьютерах, пробывал ставить и статич библиотеки и dll и mt\ и тд вылетали разн ошибки, вообщем пришол к решению создавать установщик windows и прикладывать к ним framework и нужные библиотеки, но что делать если я хочу например написать шуточную программу подшутить над кемнибудь, не буду я же ...
C++ Цельсий в Фaренгейт и Реoмюр http://www.cyberforum.ru/cpp-beginners/thread630771.html
========== Для тeмпературы от -5 до +5 °C с шaгом 1.25 °C вывeсти соoтвeтствующие знaчения по Фaренгейту и Реoмюру. oформить вывoд в видe крaсивpй тaблицы. Дробные числа округлить до 2 знаков после запятой. t(F) = t(C) * 9/5 + 32 t(R) = t(C) * 4/5 ========== мой код #include <iostream> using namespace std;
C++ Define внутри макроса Подкажите возможно ли написать макрос кот. создаст #define? например: #define MACRO(name) #define NAME name знаю, что напрямую так не напишешь т.к. второй define будет взят в кавычки, но может есть какая "хитрость" Нужен макрос раскрывающийся в следующий код пишем так: #define MAT1(name, ...) int name##1 = { __VA_ARGS__ }; #define MAT2(name, ...) int name##2 = { __VA_ARGS__ }; ... подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
30.07.2012, 22:50  [ТС]     Делаю Memory Manager Array с простым (int) exception последний элемент чудит
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вот тут я не уверен в семантике кода и ассоциативности оператора <<, стандарты читать лень. Попробуйте переписать строки 36–41 следующим образом, разбив на несколько операторов. Должно вылетать тогда только на последнем.
C++
1
2
3
4
5
std::cout << MemoryManagerArray->GetElement(0)  << "\n";
std::cout << MemoryManagerArray->GetElement(1)  << "\n";
std::cout << MemoryManagerArray->GetElement(2)  << "\n";
std::cout << MemoryManagerArray->GetElement(3)  << "\n";
std::cout << MemoryManagerArray->GetElement(27) << "\n";
Но в любом случае лучше пользоваться правильной идиомой обработки ошибок с помощью исключений:
C++
1
2
3
4
5
6
7
// оборачивать в try-catch *каждый* кусок, где может произойти ошибка
try {
  /* код, в котором может произойти ошибка */
}
catch (/* значение */) {
  /* обработка ошибки */
}
а не
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
  // весь код завёрнут в один try-catch-блок
  try {
    /* кот */
  }
  catch (/* значение */) {
    /* обработка */
  }
  return 0;
}
Это работает, но ведь это ловит только одну, первую ошибку. Дальше программа завершается.
main
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//                                                      main_cpp
 
#include <iostream>
#include "Point.hpp"
#include "Array.hpp"
 
int main()
 
    {
 
                                              
    int size_of_array = 5;                                      
    Point** MyArrayOfPointers = new Point*[size_of_array];          //Creating an array of Point pointers with 3 elements on the heap.
                    
    
    int some_data_for_x[5] = {1830 , 1901 , 1914, 1900 , 1895} ; 
    int some_data_for_y[5] = {1903 , 1947 , 1211, 1969 , 1789} ; 
 
   
    for (int i = 0 ; i <size_of_array; i++ )                        // Create for each element in the array a point on the heap.
        {
            MyArrayOfPointers[i] = new Point(some_data_for_x[i],                
                                             some_data_for_y[i]);                                                                                       
        }
 
 
         std::cout  << "\nCreating object of Array class \n"; 
         Array* MemoryManagerArray = new Array(size_of_array); 
 
         
        try 
        {
 
    std::cout << MemoryManagerArray->GetElement(0)  << "\n";
    std::cout << MemoryManagerArray->GetElement(1)  << "\n";
    std::cout << MemoryManagerArray->GetElement(2)  << "\n";
    std::cout << MemoryManagerArray->GetElement(3)  << "\n";
    std::cout << MemoryManagerArray->GetElement(27) << "\n";
        }
         catch (int throw_variable)
    {
        std::cout << "\nindex incorrect, index too big or too small " 
                  << throw_variable 
                  << std::endl; 
    }          
    
    
 
    
   
    std::cout << "\n\t Setting elements of MemoryManagerArray \n";
 
   
         
        try 
        {
 
 
    MemoryManagerArray->SetElement(*MyArrayOfPointers[0],0);                // Setting elements of MemoryManagerArray
    MemoryManagerArray->SetElement(*MyArrayOfPointers[1],1);
    MemoryManagerArray->SetElement(*MyArrayOfPointers[2],2);
    MemoryManagerArray->SetElement(*MyArrayOfPointers[3],3);
    MemoryManagerArray->SetElement(*MyArrayOfPointers[4],17);               // The set will be ignored, because out of bounds
  
    }
         catch (int throw_variable)
    {
        std::cout << "\nindex incorrect, index too big or too small " 
                  << throw_variable 
                  << std::endl; 
    }       
 
             
        try 
        {
 
 
    std::cout << MemoryManagerArray->GetElement(0)  << "\n";
    std::cout << MemoryManagerArray->GetElement(1)  << "\n";
    std::cout << MemoryManagerArray->GetElement(2)  << "\n";
    std::cout << MemoryManagerArray->GetElement(3)  << "\n";
    std::cout << MemoryManagerArray->GetElement(4)  << "\n";
    std::cout << MemoryManagerArray->GetElement(27) << "\n";    
    
        }
 
         catch (int throw_variable)
    {
        std::cout << "\nindex incorrect, index too big or too small " 
                  << throw_variable 
                  << std::endl; 
    }       
 
        
    std::cout << std::endl; 
    return 0;
    
   }


Вроде нормально работает... да действидельно try catch надо было нормально расставить и да... удивительно что действительно семантика вредила .... большое спасибо сам бы голову сломал в чем дело
 
Текущее время: 13:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru