gpt4 book ai didi

c++ - 为什么这是内存复制错误 - Insure++ 误报?

转载 作者:行者123 更新时间:2023-11-28 08:31:08 28 4
gpt4 key购买 nike

我一直在尝试运行 Insure++使用一些科学代码并报告许多错误,尽管公平地说它正式不支持 K&R C,而且我不知道大量 K&R 函数对其评估过程有何影响。它正在测试的 C 和 C++ 代码正在从 WPF 应用程序调用的 DLL 中运行。

下面是一个让我感到困惑的错误报告,我确信它是安全代码,但我正在尝试找出它认为是错误的原因(它确实有效)。如果有人了解为什么这可能是错误情况,我会很感兴趣。

[MacImagePlot.c:984] **READ_OVERFLOW**
SetCursorQD(*GetCursorQD(watchCursor));

Reading overflows memory: GetCursorQD(watchCursor)

bbbbb
| 4 | 4 |
rrrrr

Reading (r) : 0x5639d164 thru 0x5639d167 (4 bytes)
From block (b) : 0x5639d160 thru 0x5639d163 (4 bytes)
gWatchCursor, declared at WPFMacGraphics.cpp, 418

一些非常简单的代码。

    typedef int Cursor;
typedef Cursor* CursPtr;
typedef CursPtr* CursHandle;
CursHandle GetCursorQD (short cursorID);
void SetCursorQD (const Cursor *crsr);
enum {
....
watchCursor = 4
};


// file globals
Cursor gWatchCursor=watchCursor;
CursPtr gWatchCursorPtr = &gWatchCursor;

CursHandle GetCursorQD (short cursorID)
{
if (cursorID==watchCursor) // this is actually the only case ever called
return &gWatchCursorPtr;
return 0;
}

最佳答案

我对您所说的工具一点都不熟悉,但是您是否验证过您的 GetCursorQD 函数返回的是您期望的指针,而不是 NULL/0

watchCursor 的枚举定义可能发生了一些奇怪的事情(例如它在其他地方被不同地声明,或者它选择了一个局部变量而不是枚举)。

关于c++ - 为什么这是内存复制错误 - Insure++ 误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com