Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

Как проверить правильно ли ты создал дистрактор

04.09.2012, 21:52. Показов 1635. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сабжж ???
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2012, 21:52
Ответы с готовыми решениями:

Как проверить что я создал правильную матрицу?
Sub SingleMatrix() Dim i As Integer, j As Integer, A(1 To 3, 1 To 3) As Integer For i = 1 To 3 A(i, i) = 1 Next...

Создал шаблон сайта в photoshope. Как теперь его правильно сверстать?
Имееться множество картинок, их придется резать на части? Так? И потом по отдельности верстать?

Правильно ли я создал таблицу?
В Erwin у меня есть такая связь: Правильно ли я создал таблицу Заказ_Товар? Create Table ProductsInOrder(OrderId Int Foreign...

17
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
04.09.2012, 21:54
Компилируется?
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.09.2012, 21:59  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Компилируется?
а как же
нет тут вопрос в другом
допустим все компилируется и даже удаляется все или копируется все хорошо но возможно в данном проекте будут использоваться спец кейсы которые будут валить правильность выполнения операций

вот как найти что на всех кейсах будет выполняться что задумалось
0
 Аватар для PSIAlt
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
04.09.2012, 22:02
unit-тестирование?
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.09.2012, 22:09  [ТС]
Цитата Сообщение от PSIAlt Посмотреть сообщение
unit-тестирование?
да вы что это же дестрактор ! ваще азы ) я думал есть какой то стандартный эмелемент или буст или из других библиотек который я не знаю показывает какие элементы не удалились и все такое или где мемори лик или какой ниб типа статик анализатор только для мемори лика (фри варный )

Добавлено через 3 минуты
Цитата Сообщение от PSIAlt Посмотреть сообщение
unit-тестирование?
спешел кейсов то не много на самом деле.... раф поитер и раф поитор из дедушкой написанным контейнером... что еще может быть... а ну там кривая копия объекта класса и кривое использование ассаймент оператора
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.09.2012, 22:22
Цитата Сообщение от Leeto Посмотреть сообщение
Как проверить правильно ли ты создал дистрактор
На самом деле наиглупейший вопрос.
Так же можно спросить: "Как проверить, правильно ли я написал программу?". Ответ - проверить результат её выполнения!
0
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.09.2012, 22:28  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
На самом деле наиглупейший вопрос.
Так же можно спросить: "Как проверить, правильно ли я написал программу?". Ответ - проверить результат её выполнения!
если ты приравниваешь два этих вопроса то смею тебя огорчить это наиглушей образ мышления


допустим у тебя в подчинении молодые программисты
что ты будешь проверять имплементацию дестрактора, копи конструктора и ассаймент оператора (правило трех короче ) в каждом классе ...

у boost::share_ptr
есть функция которая считает количество ссылок которые не удалены еще (count) по ходу выполнения программы

должно быть что то похожее для моей конкректной цели
0
 Аватар для PSIAlt
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
04.09.2012, 22:40
Ну тада cppcheck, valgrind
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.09.2012, 22:50
Цитата Сообщение от Leeto Посмотреть сообщение
допустим у тебя в подчинении молодые программисты
что ты будешь проверять имплементацию дестрактора, копи конструктора и ассаймент оператора (правило трех короче ) в каждом классе ...
Unit-тесты. Об этом уже говорили. При чем тут конкретно деструкторы? Если тебя интересует конкретная часть кода, тогда проверяй её сам. Неужели там так много кода, чтобы нельзя было проверить самостоятельно?

Цитата Сообщение от Leeto Посмотреть сообщение
у boost::share_ptr
есть функция которая считает количество ссылок которые не удалены еще (count) по ходу выполнения программы
должно быть что то похожее для моей конкректной цели
Твоя цель размыта и не понятна.
0
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.09.2012, 23:27  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Твоя цель размыта и не понятна.
ты забыл добавить что конкретно тебе моя цели размыта и не понятна

Добавлено через 2 минуты
есть такая штука cout << "@";
неужели придется проверять количество вызванных конструкторов релевантных к определенному адрессу памяти и количество вызванных дестракторов ? наверняка же в какой ниб библиотеке эта проверялка написанна

другими словами можно узнать адресс памяти где локализован тот или иной объект...
и типа прописать а ля если объект из данного адресса не удален к концу мейна то вызывается алерт
все же просто...
наверняка это где ниб уже есть в красивом виде



Добавлено через 6 минут
Цитата Сообщение от lazybiz Посмотреть сообщение
При чем тут конкретно деструкторы?
есть такое понятие как динамически созданные объекты внутри другого класса.


расскажи мне как ты их будешь удалять если они привязанну к обычному указателю без мусоросборника ?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
04.09.2012, 23:32
Цитата Сообщение от Leeto Посмотреть сообщение
ак ты их будешь удалять если они привязанну к обычному указателю без мусоросборника ?
Операцией delete, как все нормальные люди.
2
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.09.2012, 23:42
Цитата Сообщение от Leeto Посмотреть сообщение
ты забыл добавить что конкретно тебе моя цели размыта и не понятна
Это предложение не поддается моему здравому смыслу.

Цитата Сообщение от Leeto Посмотреть сообщение
есть такое понятие как динамически созданные объекты внутри другого класса.
Да, слышал об этом.

Цитата Сообщение от Leeto Посмотреть сообщение
расскажи мне как ты их будешь удалять если они привязанну к обычному указателю без мусоросборника ?
Что ты подразумеваешь под "обычным указателем без мусоросборника" ? Как ты выделял под них память?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
04.09.2012, 23:48
Цитата Сообщение от Leeto Посмотреть сообщение
есть такое понятие как динамически созданные объекты внутри другого класса.

расскажи мне как ты их будешь удалять если они привязанну к обычному указателю без мусоросборника ?
Ящитаю, это половые трудности другого класса — удалять свои динамически созданные объекты. Вызвали деструктор — объект должен умереть. Вместе со всем, что он для себя насоздавал.
2
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.09.2012, 23:59  [ТС]
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ящитаю, это половые трудности другого класса — удалять свои динамически созданные объекты. Вызвали деструктор — объект должен умереть. Вместе со всем, что он для себя насоздавал.

Другими словами если функция / библиотечный элемент, который перед тем как прога завершенно выдает количество мусора которое висит в хипе ???


если еще проще... если что ниб типа того :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "boost/garbage_manager.hpp"/ #include <garbage_manager>
 
int main () 
{
 
... 
... 
... 
 
3 млн лайнов 
 
... 
... 
 
 
 
cout << "show garbage" << std::show_all_garbage / boost::show_all_garbage; 
return 0 ;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.09.2012, 23:59
~OhMyGodSoLong~, я абсолютно с вами согласен.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
05.09.2012, 00:00
Цитата Сообщение от Leeto Посмотреть сообщение
Другими словами если функция / библиотечный элемент, который перед тем как прога завершенно выдает количество мусора которое висит в хипе ???
Прогу уже называли: valgrind.

С типами данных вряд ли информацию можно выдать (нет рефлексии), но просто суммарно количество просранной памяти теоретически реально: переопределяете глобальные operator new и operator delete, пусть ведут лог того, сколько выделено и сколько удалено.
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
05.09.2012, 00:11  [ТС]
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Прогу уже называли: valgrind.

С типами данных вряд ли информацию можно выдать (нет рефлексии), но просто суммарно количество просранной памяти теоретически реально: переопределяете глобальные operator new и operator delete, пусть ведут лог того, сколько выделено и сколько удалено.
а как это сдалать??? как обычная перегрузка оператор

C++
1
2
3
4
5
6
7
8
9
10
11
class Anyclass 
{
int unsigned counter = 0; 
public : 
... 
friend void new (/*а куда запихать что это относиться к этого классу... сюда что ли ?*/) 
{
counter ++ ; 
}
 
}
что то типа того ???

И что придется для всех 28 классов такую перегруженную штуку писать ???
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.09.2012, 10:44
Лучший ответ Сообщение было отмечено как решение

Решение

Leeto, Операторы можно и глобально переопределить, но делать я этого не советую. Скорее уж написать аллокатор, который будет за этим следить или класс с перегруженными оператороми new/delete и унаследоваться от него.

Так же сюда можно прикрутить - просмотр выделена память под массив или под простой указатель и т.д.

Почитал стандарт. Т.к. стандартные операторы выглядят так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
void* operator new(std::size_t size);
void* operator new(std::size_t size, const std::nothrow_t&) noexcept;
void operator delete(void* ptr) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
void* operator new[](std::size_t size);
void* operator new[](std::size_t size, const std::nothrow_t&) noexcept;
void operator delete[](void* ptr) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
void* operator new (std::size_t size, void* ptr) noexcept;
void* operator new[](std::size_t size, void* ptr) noexcept;
void operator delete (void* ptr, void*) noexcept;
void operator delete[](void* ptr, void*) noexcept;
То у себя переделал соответственно.

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
#include <map>
#include <stdexcept>
 
template<typename T>
class Storage : public std::map<void*, size_t>
{
public:
   typedef std::map<void*, size_t> base_type;
   typedef base_type::iterator iterator;
 
   ~Storage()
   {
      if (!empty())
      {
         std::cerr << "Not freed: " << size() << " of type: " << T::get_name() << std::endl;
         for (iterator i = begin(); i != end(); ++i)
         {
            std::cerr << i->first << " bytes: " << i->second << std::endl;
         }
      }
   }
   Storage(const Storage&) = delete;
   Storage& operator =(const Storage&) = delete;
   Storage(Storage&&) = delete;
   Storage& operator =(Storage&&) = delete;
   static Storage& instance()
   {
      static Storage storage;
      return storage;
   }
private:
   Storage() = default;
};
 
template<typename T>
class Arena
{
public:
   void* operator new(size_t sz)
   {
      void* result = ::operator new(sz);
      allocated_.insert(std::make_pair(result, sz));
      return result;
   }
   void* operator new(size_t sz, const std::nothrow_t& nt) noexcept
   {
      void* result = ::operator new(sz, nt);
      if (result)
      {
         allocated_.insert(std::make_pair(result, sz));
      }
      return result;
   }
   void* operator new(size_t sz, void* ptr) noexcept
   {
      return ::operator new(sz, ptr);
   }
   void* operator new[](size_t sz)
   {
      void* result = ::operator new[](sz);
      allocated_.insert(std::make_pair(result, sz));
      return result;
   }
   void* operator new[](size_t sz, const std::nothrow_t& nt) noexcept
   {
      void* result = ::operator new[](sz, nt);
      if (result)
      {
         allocated_.insert(std::make_pair(result, sz));
         return result;
      }
   }
   void* operator new[](size_t sz, void* ptr) noexcept
   {
      return ::operator new[](sz, ptr);
   }
   void operator delete(void* ptr) noexcept
   {
      typename Storage<T>::iterator i = allocated_.find(ptr);
      if (i == allocated_.end())
      {
         std::cerr << "Double free on: " << ptr << " of type: " << T::get_name() << ". Terminate program" << std::endl;
         std::abort();
      }
      allocated_.erase(ptr);
      ::operator delete(ptr);
   }
   void operator delete(void* ptr, const std::nothrow_t&) noexcept
   {
      return operator delete(ptr);
   }
   void operator delete(void* ptr, void* place) noexcept
   {
      return ::operator delete(ptr, place);
   }
   void operator delete[](void* ptr) noexcept
   {
      typename Storage<T>::iterator i = allocated_.find(ptr);
      if (i == allocated_.end())
      {
         std::cerr << "Double free on: " << ptr << " of type: " << T::get_name() << ". Terminate program" << std::endl;
         std::abort();
      }
      allocated_.erase(ptr);
      ::operator delete[](ptr);
   }
   void operator delete[](void* ptr, const std::nothrow_t&) noexcept
   {
      return operator delete(ptr);
   }
   void operator delete[](void* ptr, void* place) noexcept
   {
      return ::operator delete(ptr, place);
   }
private:
   static Storage<T>& allocated_;
};
 
template<typename T>
Storage<T>& Arena<T>::allocated_ = Storage<T>::instance();
 
struct Empty : public Arena<Empty>
{
public:
   static const char* get_name() { return "Empty"; }
};
 
struct No : public Arena<No>
{
public:
   static const char* get_name() { return "No"; }
};
 
int main()
{
   Empty* p = new Empty;
   char* ptr = (char*)operator new(sizeof(No));
   No* no = new (ptr) No;
   delete ptr;
   No* no1 = new (std::nothrow) No;
   delete no1;
   No* new_arr = new No[10];
   delete new_arr;
}
Добавлено через 34 минуты
Вот заодно с обработкой UB при неправильном вызове delete-а.

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <iostream>
#include <set>
#include <stdexcept>
 
struct Memory
{
   Memory() { }
   Memory(void* mem, size_t b, size_t els, bool is):
      memory(mem), bytes(b), elements_count(els), is_array(is)
   {
   }
   void* memory;
   size_t bytes;
   size_t elements_count;
   bool is_array;
};
 
bool operator < (const Memory& lhs, const Memory& rhs)
{
   return lhs.memory < rhs.memory;
}
 
std::ostream& operator << (std::ostream& os, const Memory& mem)
{
   os << "Address: " << mem.memory << " elements: " << mem.elements_count << " bytes: " << mem.bytes
      << " is_array: " << std::boolalpha << mem.is_array;
   return os;
}
 
template<typename T>
class Storage : public std::set<Memory>
{
public:
   typedef std::set<Memory> base_type;
   typedef base_type::iterator iterator;
 
   ~Storage()
   {
      if (!empty())
      {
         std::cerr << "Not freed " << size() << " elements of type: " << T::get_name() << std::endl;
         for (iterator i = begin(); i != end(); ++i)
         {
            std::cerr << *i << std::endl;
         }
      }
   }
   Storage(const Storage&) = delete;
   Storage& operator =(const Storage&) = delete;
   Storage(Storage&&) = delete;
   Storage& operator =(Storage&&) = delete;
   static Storage& instance()
   {
      static Storage storage;
      return storage;
   }
private:
   Storage() = default;
};
 
template<typename T>
class Arena
{
public:
   void* operator new(size_t sz)
   {
      void* result = ::operator new(sz);
      allocated_.insert(Memory(result, sz, 1, false));
      return result;
   }
   void* operator new(size_t sz, const std::nothrow_t& nt) noexcept
   {
      void* result = ::operator new(sz, nt);
      if (result)
      {
         allocated_.insert(Memory(result, sz, 1, false));
      }
      return result;
   }
   void* operator new(size_t sz, void* ptr) noexcept
   {
      return ::operator new(sz, ptr);
   }
   void* operator new[](size_t sz)
   {
      void* result = ::operator new[](sz);
      allocated_.insert(Memory(result, sz, sz / sizeof(T), true));
      return result;
   }
   void* operator new[](size_t sz, const std::nothrow_t& nt) noexcept
   {
      void* result = ::operator new[](sz, nt);
      if (result)
      {
         allocated_.insert(Memory(result, sz, sz / sizeof(T), true));
         return result;
      }
   }
   void* operator new[](size_t sz, void* ptr) noexcept
   {
      return ::operator new[](sz, ptr);
   }
   void operator delete(void* ptr) noexcept
   {
      Memory tmp;
      tmp.memory = ptr;
      typename Storage<T>::iterator i = allocated_.find(tmp);
      if (i == allocated_.end())
      {
         std::cerr << "Double free on: " << ptr << " of type: \"" << T::get_name() << "\". Terminate program" << std::endl;
         std::abort();
      }
      else
      {
         if (i->is_array)
         {
            std::cerr << "Free of array: " << i->memory << " of size " << i->elements_count
               << " with " << i->bytes  << " bytes of type \"" << T::get_name() << "\" with non-array delete operator."
               << " Terminate" << std::endl;
            std::abort();
         }
      }
      allocated_.erase(tmp);
      ::operator delete(ptr);
   }
   void operator delete(void* ptr, const std::nothrow_t&) noexcept
   {
      return operator delete(ptr);
   }
   void operator delete(void* ptr, void* place) noexcept
   {
      return ::operator delete(ptr, place);
   }
   void operator delete[](void* ptr) noexcept
   {
      Memory tmp;
      tmp.memory = ptr;
      typename Storage<T>::iterator i = allocated_.find(tmp);
      if (i == allocated_.end())
      {
         std::cerr << "Double free on: " << ptr << " of type: \"" << T::get_name() << "\". Terminate program" << std::endl;
         std::abort();
      }
      else
      {
         if (!i->is_array)
         {
            std::cerr << "Free of element: " << i->memory << " with size " << i->bytes
               << " of type \"" << T::get_name() << "\" with array delete operator."
               << " Terminate" << std::endl;
            std::abort();
         }
      }
      allocated_.erase(tmp);
      ::operator delete[](ptr);
   }
   void operator delete[](void* ptr, const std::nothrow_t&) noexcept
   {
      return operator delete(ptr);
   }
   void operator delete[](void* ptr, void* place) noexcept
   {
      return ::operator delete(ptr, place);
   }
private:
   static Storage<T>& allocated_;
};
 
template<typename T>
Storage<T>& Arena<T>::allocated_ = Storage<T>::instance();
 
struct Empty : public Arena<Empty>
{
public:
   static const char* get_name() { return "Empty"; }
};
 
struct No : public Arena<No>
{
public:
   static const char* get_name() { return "No"; }
};
 
int main()
{
   Empty* p = new Empty;
   char* ptr = (char*)operator new(sizeof(No));
   No* no = new (ptr) No;
   delete ptr;
   No* no1 = new (std::nothrow) No;
   delete no1;
   No* new_arr = new No[10];
   delete[] new_arr;
}
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2012, 10:44
Помогаю со студенческими работами здесь

Правильно ли я создал таблицу?
Спустя 4 года практики создания сайтов на основе Вордпресса решил возобновить создание сайтов со своими решениями. И понял, что я очень...

Подскажите, правильно ли я создал связи?

Правильно ли создал запрос с внешними ключами MYSQL
Приветствую, правильно ли я сделал .Если нет , объясните что не так address_id из таблицы Users- должен быть внешним ключем таблицы...

[Подскажите ламеру] Правильно ли я создал структуру инфоблоков для интернет-магазина?
Три дня ищу и не найду - как лучше организовать торговый каталог. Имею десяток категорий товара по теме автоаксессуаров - коврики,...

Как правильно проверить на вирусы?
Приветствую, извиняюсь за глупый наверно вопрос.. приобрёл б.у. ноут бук, лицензионный виндоус 7 х64 хоум стоит (переустанавливать не...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru