2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 09:26 
Аватара пользователя
Не обязательно. Где угодно раньше по ходу выполнения.
address sanitizer должен такое поймать.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 09:32 
пианист, не обязательно. Куча, как правило, одна на всю программу. Но я редко сталкивался с такой ошибкой, поэтому не могу указать типичный сценарий. Попробуйте проследить за аккуратностью соблюдения границ массивов выделяемой памяти и за аккуратностью её освобождения(например, повторное освобождение уже освобождённого блока памяти тоже приводит к ошибкам такого сорта). Можно посмотреть в сторону использования умных указателей, которые в определённой степени берут эти заботы на себя.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 10:27 
Аватара пользователя
mihaild в сообщении #1528506 писал(а):
address sanitizer должен такое поймать

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

и когда я писал в последний (зарезервированный!) элемент массива, происходило то самое нарушение.
Проблему пофиксил заказ лишнего элемента массива.
Используется синтаксис C
int* wini = (int*)calloc(num_vag + 1, sizeof(int));

Думаю, надо теперь весь код прочесать на предмет таких мест, и последний элемент лучше не трогать.
Еще раз спасибо всем откликнувшимся!

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 10:47 
пианист в сообщении #1528509 писал(а):
int row = 1;

В c/c++ индексы массивов начинаются с $0$, а не с $1$, так что у вас явный выход за границу массива.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 10:51 
Аватара пользователя
Точно! Лопухнулся :oops:

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение16.09.2021, 01:23 
Аватара пользователя
Почему бы не сделать так? Вроде как гораздо логичнее:

Используется синтаксис C
int* wini = (int*) calloc (num_vag, sizeof (int));
..
//int row = 1;
    //win
    for (int row = 0; row < num_vag; ++row)
    {
        wini [row] = i;
        //++row;
    }

Закоментированные строки потереть. В принципе, с такой оптимизацией должен и компилятор справится, но вдруг?

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение16.09.2021, 10:25 
Аватара пользователя
Не, так не получится.
row "сквозной" номер строки в матрице, выражение в разных частях матрицы считается существенно по разному.
Так, влегкую, пронумеровать не удастся.

 
 
 [ Сообщений: 22 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group