2014 dxdy logo

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

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




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


16/07/14
9202
Цюрих
Не обязательно. Где угодно раньше по ходу выполнения.
address sanitizer должен такое поймать.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 09:32 


14/01/11
3062
пианист, не обязательно. Куча, как правило, одна на всю программу. Но я редко сталкивался с такой ошибкой, поэтому не могу указать типичный сценарий. Попробуйте проследить за аккуратностью соблюдения границ массивов выделяемой памяти и за аккуратностью её освобождения(например, повторное освобождение уже освобождённого блока памяти тоже приводит к ошибкам такого сорта). Можно посмотреть в сторону использования умных указателей, которые в определённой степени берут эти заботы на себя.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 10:27 
Заслуженный участник
Аватара пользователя


03/06/08
2337
МО
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 


14/01/11
3062
пианист в сообщении #1528509 писал(а):
int row = 1;

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

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 10:51 
Заслуженный участник
Аватара пользователя


03/06/08
2337
МО
Точно! Лопухнулся :oops:

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение16.09.2021, 01:23 
Аватара пользователя


26/05/12
1700
приходит весна?
Почему бы не сделать так? Вроде как гораздо логичнее:

Используется синтаксис 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 
Заслуженный участник
Аватара пользователя


03/06/08
2337
МО
Не, так не получится.
row "сквозной" номер строки в матрице, выражение в разных частях матрицы считается существенно по разному.
Так, влегкую, пронумеровать не удастся.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group