Ошибка проверки времени выполнения при использовании библиотеки Boost Date Time и Visual Studio 2008 - PullRequest
2 голосов
/ 11 декабря 2010

Я студент первого курса информатики, пишу программу на С ++, которая разбивает пузырьки по массиву случайно назначенных чисел с плавающей запятой, а затем использует двоичный поиск, чтобы найти значение последнего элемента в массиве (для согласованности во время синхронизацииcode).

Я хочу рассчитать время выполнения сортировки по пузырям и двоичного поиска, но стандартная библиотека времени c ++ даст мне только точность второго уровня, которую нельзя использовать, так как этот код выполняется ниже 1секунду большую часть времени.

Я обнаружил Boost, и я пытаюсь использовать его как способ получения точности с точностью до секунды при выполнении кода с использованием микросекундных часов в библиотеке Boost DateTime.Код, который я использую: http://pastebin.com/U8D0s2hb. Когда я выполняю этот код, я получаю следующую ошибку из Visual Studio 2008:

Ошибка проверки времени выполнения # 0 - значение ESPне был должным образом сохранен при вызове функции.Обычно это является результатом вызова функции, объявленной с одним соглашением о вызовах, с указателем функции, объявленным с другим соглашением о вызовах.

Кажется, что преступник получает время как объект ptime, но у меня естьпонятия не имею, почему, поскольку я никогда раньше не видел ошибку проверки времени выполнения.

Любая помощь приветствуется, спасибо.

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Это похоже на проблему соглашения о вызовах, но, похоже, на самом деле это проблема выравнивания элементов структуры.

Вы должны использовать выравнивание элементов структуры по умолчанию в своем клиентском коде. В свойствах вашего проекта выберите Configuration Properties, C/C++, Code Generation и убедитесь, что для параметров Structure Member Alignment установлено значение Default.

См. здесь для другого вопроса об этой проблеме.

0 голосов
/ 26 июля 2013

У меня была такая же проблема с boost.thread.

Я отследил историю изменений и обнаружил, что добавил <<em> windows.h > перед <<em> boost /thread.hpp >.Я подозревал, что, возможно, заголовок windows.h определил некоторые соглашения о вызовах, которые могут запутать boost / thread.hpp, поэтому я поместил файл windows.h после boost / thread.hpp, и проблема исчезла.

Надеюсь, это поможет.

...