2

我是计算机科学专业的一年级学生,正在编写一个 c++ 程序,该程序对一组随机分配的浮点数进行冒泡排序,然后使用二分叉搜索来查找数组中最后一个元素的值(为了在计时代码时保持一致性)。

我想计时执行冒泡排序和二进制印章搜索,但 c++ 标准时间库只会给我第二级精度,这是不可用的,因为这段代码大部分时间都在 1 秒内执行。

我找到了 Boost,我正在尝试将其用作使用 Boost DateTime 库中的微秒时钟获取代码执行的亚秒级精度计时的方法。我使用的代码位于http://pastebin.com/U8D0s2hb。当我执行此代码时,我从 Visual Studio 2008 收到以下错误:

运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。

罪魁祸首似乎是将时间作为 ptime 对象,但我不知道为什么,因为我以前从未见过运行时检查失败错误。

任何帮助表示赞赏,谢谢。

4

2 回答 2

1

这看起来像是一个调用约定问题,但看起来它实际上是一个结构成员对齐问题。

您必须在客户端代码中使用默认结构成员对齐方式。在项目的属性中,选择Configuration PropertiesC/C++Code Generation并确保Structure Member Alignment选项设置为Default

有关此问题的另一个问题,请参见此处

于 2010-12-11T06:20:06.653 回答
0

我对 boost.thread 有同样的问题。

我跟踪了更改历史,发现我在 < boost/thread.hpp > 之前添加了一个标头 < windows.h >。我怀疑可能是windows.h头文件定义了一些会混淆boost/thread.hpp的调用约定,所以我把windows.h文件放在boost/thread.hpp之后,问题就消失了。

希望这可以帮助。

于 2013-07-26T15:58:21.243 回答