Просмотр сообщений
|
Страниц: 1 ... 5 6 [7] 8 9 ... 142
|
91
|
Программирование / С/C++ / Re: Перегрузка функций
|
: Август 13, 2018, 09:23
|
Можно определить конструктор List<T>::const_iterator от List<T>::iterator и должно заработать. Сейчас компиль не понимает, как ему преобразовать const_iterator в iterator. Ещё можно при текущей реализации попробовать отдельно создать объект const_iterator, затем ему присвоить iterator. C++ (Qt) List<int> list; List<int>::const_iterator it; it = list.begin();
|
|
|
94
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 03, 2018, 15:45
|
Вроде, удалось подавить вывод data race санитайзера таким путём: Указал уровень оптимизаций 0. Таким образом получил более конкретное место. Там производилось 3 обращения подряд к std::map::at заменил их на константные варианты. Не понимаю, как константность методов влияет. Псевдокод проблемного места C++ (Qt) PARALLEL_FOR for (i in range) { const Triangle triangle(vertices_, i); ..... } Triangle::Triangle(vertex_map *vertices, int i) : a(vertices.at(i)), b(vertices.at(i+1)), c(vertices.at(i+2)) {}
|
|
|
95
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 22:53
|
Да, в логгере имеется мьютекс, видать, он влиял на результат Я забыл упомянуть, у меня ещё парсинг (открытие файла) происходит в std::async, но к моменту расчёта парсинг окончен. ThreadSanitizer показал много мест... Ругнулся также на ui->setup(this). Также ругнулся и на интересующее место. У меня проблема интерпретации вывода, прошу помочь C++ (Qt) FaceSet result; // using FaceSet = QSet<Face>; const VolumeNumberList &volumeNumbers = mesh()->volumeNumbers(); // byval QVector PARALLEL_FOR for (int i = 0; i < volumeNumbers.count(); ++i){ //taking volume byref const MeshVolume &volume = mesh()->volume(volumeNumbers.at(i)); // Read of size 2 at 0x7b080008b95c by thread T13: const auto &volumeRange = volume.range(); // can modify mutable range_ if (!isVolumeHasToBeChecked(volume, filter) || !hasIntersection(line, volumeRange)){ continue; } const auto &shell = volume.shell(); //by value const auto &shellFaces = shell.shellFaces(); //by value QVector const FaceSet &volumeResult = intersectedFacesWithLine(line, shellFaces); // byval QSet SCALAR{ result += volumeResult; } } return result;
C++ (Qt) #ifdef _OPENMP #define PARALLEL_FOR _Pragma("omp parallel for") #define SCALAR _Pragma("omp critical") #else #define PARALLEL_FOR #define SCALAR #endif
|
|
|
97
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 16:25
|
Все подобные переменные имеют время жизни в пределах итерации for и формируются из неизменяемых в процессе работы цикла объектов.
|
|
|
98
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 16:00
|
Потоки используются?
Легально ли в потоках пользоваться методами временных объектов вроде такого: C++ (Qt) const auto &val = var->getString().trimed(); // return by value
|
|
|
99
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 15:56
|
как вариант - прогнать код через статический анализатор кода(pvs или clang).
cppcheck использовал Поругался только на отсутствие explicit
|
|
|
101
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 13:30
|
Ещё есть момент - на той машине 2 монитора. Но, вроде, это никак не влияет C++ (Qt) Converting user click: QPoint(389,671) to line
|
|
|
102
|
Программирование / С/C++ / Re: Отлов ошибки
|
: Август 01, 2018, 13:23
|
Что у тебя задействовано в расчете? У меня как-то был косяк на одной машине из-за того, что использовалась Cuda, а дрова на видюху стояли какие-то кривые...
В расчёте задействованы матрицы, точки из Qt также мои классы геометрии (плоскость, линия, треугольник). Клик берётся из QOpenGLWidget, но вроде корректные значения выставляются. Нужно искать не инициализированные переменные. Это первое, о чём подумал. Глазками пробежался - вроде нет. Стараюсь не допускать таких Мне кажется, валгринд бы ругнулся на неинициализированную переменную. А может существует ключик gcc/clang инициализировать неинициализированные переменные фиксированным значением? .. некорректный расчёт.
Т.е. вылета нет, некорректный рез-т? Ну тогда для начала лог: входные данные + рез-т. Текущего лога недостаточно. При подробном логгировании не воспроизводится
|
|
|
103
|
Программирование / С/C++ / Отлов ошибки
|
: Август 01, 2018, 09:46
|
Привет друзья! Столкнулся с проблемой, что на одной машине программа выполняет некорректный расчёт. Подключиться к ней нет возможности... Пробовал воспроизвести проблему под санитайзерами и valgrind - ругань только на сторонние либы и не в момент интересующего меня расчёта. Входные данные примерно одинаковые (могут отличаться настройки отображения элементов отрисовки и положение клика пользователя) Как только добавляю больше логов, чтобы локализовать проблему на проблемной машине, как она сразу пропадает. Быть может кто-нибудь подкинет идей что можно ещё попробовать сделать для решения проблемы...
|
|
|
|
|