QueryPerformanceCounter 运行时错误

Posted

技术标签:

【中文标题】QueryPerformanceCounter 运行时错误【英文标题】:QueryPerformanceCounter run-time error 【发布时间】:2013-03-20 17:23:35 【问题描述】:

嘿,我正在使用 QueryPerformanceCounter 来计算函数需要多长时间(以毫秒为单位),但我收到了这个运行时错误:

Run-Time Check Failure #2 - Stack around variable 'time1' is corrupted.

我已经搜索并尝试了所有方法,但我无法弄清楚这个错误。有谁能够帮助我? 这是它发生的代码:7

void print()

    unsigned long int time1 = 0;
    unsigned long int time2 = 0;
    QueryPerformanceCounter((LARGE_INTEGER*)&time1);
    //Loop through the elements in the array.
    for(int index = 0; index < num_elements; index++)
    
        //Print out the array index and the arrays elements.
        cout <<"Index: " << index << "\tElement: " << m_array[index]<<endl;
    
    //Prints out the number of elements and the size of the array.
    cout<< "\nNumber of elements: " << num_elements;
    cout<< "\nSize of the array: " << size << "\n";

    QueryPerformanceCounter((LARGE_INTEGER*)&time2);
    cout << "\nTime Taken : " << time1 - time2 <<endl;

【问题讨论】:

How to use QueryPerformanceCounter?的可能重复 【参考方案1】:

问题在这里QueryPerformanceCounter((LARGE_INTEGER*)&amp;time1);

在将其地址传递给QueryPerformanceCounter 时不要使用unsigned long int

unsigned long int 只保证至少 32 位。

使用 64 位变量

#include <cstdint>    // + include this
int64_t

long long int

【讨论】:

@Becca 尝试使用 long long int。我在这段代码中没有看到任何其他问题。 对不起,这是我的错,我忘记了 &。虽然当时我得到了一个负数:S. 为什么要选角?使用LARGE_INTEGER time1, time2; 会让这一切变得容易得多。 @BoPersson 我想知道我的变量到底是什么,尤其是当 LARGE_INTEGER 仅用于 QueryPerformanceCounter() 时。

以上是关于QueryPerformanceCounter 运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

QueryPerformanceCounter 运行时错误

为啥与两者相比得到不同的毫秒值(QTIme 和 QueryPerformanceCounter)

QueryPerformanceCounter 是不是保证在启动后给您时间?

QueryPerformanceCounter 抛出不正确的数字

QueryPerformanceCounter 和奇怪的结果

QueryPerformanceCounter 状态?