address sanitizer должен такое поймать
Да!! Нашел.
Огромное Вам спасибо!
Источник (?) оказался вот в каких местах
int* wini = (int*)calloc(num_vag, sizeof(int));
..
int row = 1;
//win
for (int i = 0; i < num_vag; ++i)
{
wini[row] = i;
++row;
}
и когда я писал в последний (зарезервированный!) элемент массива, происходило то самое нарушение.
Проблему пофиксил заказ лишнего элемента массива.
int* wini = (int*)calloc(num_vag + 1, sizeof(int));
Думаю, надо теперь весь код прочесать на предмет таких мест, и последний элемент лучше не трогать.
Еще раз спасибо всем откликнувшимся!