HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Страницы (9): « 1 2 3 4 [5] 6 7 8 9 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34522
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


nemyax
У нас кастомные аллокаторы с сентинелями.
Кажется, в CRT дебажный аллокатор тоже умеет проверять на предмет порчи, но я им не пользовался.
Проверь все массивы, нет ли выхода за границу.
Если порча у класс-мембера, проверь, нет ли перезаписи за пределы другого класс-мембера.
Попробуй комментировать memcpy и смотреть, пропадает ли баг.

Цитата:
nemyax писал:
причём это число воспроизводимое

Ну это вообще самый идеальный и лёгкий для дебага вариант.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 182743

Старое сообщение 21-08-2019 16:51
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Цитата:
XaeroX писал:
Проверь все массивы, нет ли выхода за границу.

Попроверяю ещё, конечно. Но кабут всё укладывается в выделенные размеры на куче. А если выясняется, что размер данных малый, то и вовсе обхожусь массивом на стеке без кучы.

Цитата:
XaeroX писал:
У нас кастомные аллокаторы с сентинелями.

Не на асме же вы их пишете. Небось оборачиваете стандартные средства под конкретную задачу.

Насколько вообще надёжно перетирать структы, хранящие указатели?

Сообщить модератору | | IP: Записан
Сообщение: 182745

Старое сообщение 21-08-2019 17:10
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34522
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
nemyax писал:
Насколько вообще надёжно перетирать структы, хранящие указатели?

Ты бы код показал, что ли, а то сеанс телепатической связи отнимает очень много энергии.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 182748

Старое сообщение 21-08-2019 17:53
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Структы такого рода:

C++ Source Code:
1
struct umark
2
{
3
  const int *ptr;
4
};
5
 
6
struct ulink
7
{
8
  uvert *vert;
9
  ulink *twin;
10
  ulink *wrap;
11
  uedge *edge;
12
  ubend *bend;
13
  umark *mark;
14
};
15
 
16
struct uvert
17
{
18
  flags options;
19
  union {float xyz[3]; vec3 coords;};
20
  ulink *link;
21
  uties *ties;
22
  extra_info *extra;
23
  int misc;
24
};
25
 
26
struct uedge
27
{
28
  flags options;
29
  ulink *link;
30
  uties *ties;
31
  extra_info *extra;
32
  int misc;
33
};
34
 
35
struct uface
36
{
37
  flags options;
38
  usurf *material;
39
  ubend *bend;
40
  uties *ties;
41
  extra_info *extra;
42
  int misc;
43
};
44
 
45
struct undo_chunk
46
{
47
  int type;
48
  void *addr;
49
  char state1[Undo_slot_size];
50
  char state2[Undo_slot_size];
51
  undo_chunk *smaller; // in terms of memory address
52
  undo_chunk *greater; // in terms of memory address
53
};
54
 
55
struct backup
56
{
57
  int count;
58
  undo_chunk *root;
59
};


Перезапись состояний в таком духе:
C++ Source Code:
1
void history::change_state(undo_buffer *b, void (*fun)(undo_chunk*))
2
{
3
  backup *bak = b->bak;
4
  int count = bak->count;
5
  if (bak->root == NULL) {return;}
6
    undo_chunk **stack = NULL;
7
  if (Is_small(count))
8
  {
9
    undo_chunk *s[Small_tree];
10
    stack = (undo_chunk**)s;
11
  }
12
  else {stack = (undo_chunk**)malloc(sizeof(undo_chunk*) * count);}
13
    int pos = 0;
14
  undo_chunk *ch = bak->root;
15
  undo_chunk *gr, *sm;
16
  stack[pos] = ch;
17
  while (pos >= 0)
18
  {
19
    ch = stack[pos];
20
    gr = ch->greater;
21
    sm = ch->smaller;
22
    if (gr != NULL) {stack[pos++] = gr;}
23
      if (sm != NULL) {stack[pos++] = sm;}
24
        fun(ch);
25
      --pos;
26
    }
27
  if (!Is_small(count)) {free(stack);}
28
  }

Сообщить модератору | | IP: Записан
Сообщение: 182756

Старое сообщение 21-08-2019 18:32
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34522
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Ух... кондовый такой си.
Ты указатели чтоли сохраняешь, а не сами данные? Оно так разве будет работать?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 182757

Старое сообщение 21-08-2019 18:36
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Вот я и говорю, под линуксом просто работает. Под вендой (компилятор vc9) тоже работает, но начинается наркомания после энного повторения.

Сообщить модератору | | IP: Записан
Сообщение: 182758

Старое сообщение 21-08-2019 18:42
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32209
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
nemyax писал:
Когда у вас, опытные товарищи, начинается чертовщина с порчей памяти, где кроме аллокации-высвобождения вы ищете её причины?

Странная постановка вопроса. Ни аллокация ни высвобождение память не портят. Очевидно она портится во время использования. А высвобождение просто фиксирует этот факт. Ну это как ключи потерять где угодно, а искать возле фонаря, потому что там светлее.

Добавлено 21-08-2019 в 21:58:

Поглядел код. Если уж сохранять что-то с указателями, то логично кусок памяти выделять так чтобы в него попала структура + то что мы хотели сохранить. И тада уже можно с этим иметь дело. И не использовать явные указатели, а что-то типа (struct + 1). Ну это так, к слову.
Тут помойму проблема в самой задумке. Это вообще не будет нормально работать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 182760

Старое сообщение 21-08-2019 18:58
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Хорошо, скажем иначе: где кроме ошибочных аллокации-освобождения?

Добавлено 21-08-2019 в 22:07:

Цитата:
Дядя Миша писал:
Это вообще не будет нормально работать

Почему? Что может заставить систему похерить выделенные данные с того места, где она их выделила?

Сообщить модератору | | IP: Записан
Сообщение: 182761

Старое сообщение 21-08-2019 19:07
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32209
Нанёс повреждений: 392 ед.

Рейтинг



Систему - ничего. Ты сам там что-то херишь, но скорее всего просто не понимаешь этого. Это самый частый сценарий. Ты думаешь что всё в порядке, а сам что-то портишь. Я за все годы программирования один единственный раз столкнулся, когда мне система в штаны насрала - тот известный случай, когда в libc и msvcrt разная реализация atof. А всё остальное - это уже сам себе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 182773

Старое сообщение 21-08-2019 19:42
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Цитата:
Дядя Миша писал:
Ты сам там что-то херишь, но скорее всего просто не понимаешь этого. Это самый частый сценарий.

Вот и я о чём. Система ведь единожды выделив память сама собой не переместит её содержимое. По крайней мере мы на это рассчитываем, когда пользуемся языком без сборщика мусора. Она даже течку допустит, но занятое место не тронет. Ну по идее.

Сообщить модератору | | IP: Записан
Сообщение: 182774

Старое сообщение 21-08-2019 19:48
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32209
Нанёс повреждений: 392 ед.

Рейтинг



Во-во, я ж и говорю что ты не о том думаешь. У тебя там что-то с указателями, скорее всего. Память-то на старом месте, а вот на что указатели указывают, это другое дело.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 182775

Старое сообщение 21-08-2019 19:58
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



То, что я где-то написал фигню, не означает, что общая задумка работать не будет в принципе.
Меня плющит, что коллапс созревает постепенно к четвёртому-пятому анду-реду и только при использовании компилятора микрософта.

Сообщить модератору | | IP: Записан
Сообщение: 182779

Старое сообщение 21-08-2019 20:18
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32209
Нанёс повреждений: 392 ед.

Рейтинг



Компилятор тут точно непричём. Значит где-то посадил UB. Накопительный баг. Надо там хотя бы алертов понтаыкать и посмотреть чо происходит.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 182780

Старое сообщение 21-08-2019 21:39
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Всё-таки нашёл одну течку. Заткнул, и порча снята.

Сообщить модератору | | IP: Записан
Сообщение: 182929

Старое сообщение 26-08-2019 18:23
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Микрософт опубликовал свой STL под лицензией Apache: https://devblogs.microsoft.com/cppb...cing-msvcs-stl/

Добавлено 24-09-2019 в 01:32:

На ЛОРе профессионалы наорудовали, что там не только STL, но и либстдц++ как таковой. Не знаю, правда ли.

Сообщить модератору | | IP: Записан
Сообщение: 184005

Старое сообщение 23-09-2019 22:32
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 13:15. Новая тема    Ответить
Страницы (9): « 1 2 3 4 [5] 6 7 8 9 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024