【问题标题】:C++ strange access violation Visual studio 2015 RCC++ 奇怪的访问冲突 Visual Studio 2015 RC
【发布时间】:2015-09-23 01:27:34
【问题描述】:

这个错误我真的很疑惑,不知道是C++问题,OpenCV,IDE问题还是知识匮乏。我正在使用 VS2015 RC,OpenCV 2.4.10。 这是我的代码

void cluster(cv::Mat &im)
{
cv::Mat thresholded = im.clone();
threshold(im, thresholded, 254, 255, CV_THRESH_BINARY);

// Setup SimpleBlobDetector parameters.
SimpleBlobDetector::Params params;
params.filterByCircularity = false;
params.filterByInertia = false;
params.filterByColor = false;

// Change thresholds
params.minThreshold = 200;
params.maxThreshold = 250;

// Filter by Area.
params.filterByArea = true;
params.minArea = 50;

// Filter by Convexity
params.filterByConvexity = true;
params.minConvexity = 0;
params.maxConvexity = 1;

// Set up the detector with default parameters.
SimpleBlobDetector detector(params);


// Detect blobs.
std::vector<KeyPoint> keypoints;

detector.detect(thresholded, keypoints);
}

当我运行这段代码时,每一行都执行得很好,但在函数结束时我得到以下错误

Exception thrown at 0x00007FFAC07A51EA (ntdll.dll) in OP4.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Unhandled exception at 0x00007FFAC07A51EA (ntdll.dll) in OP4.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

如果我使用默认构造函数初始化 SimpleBlobDetector,则不会出现问题。我检查了检测函数的返回,它返回了正确的值,我什至绘制了它。但是函数结束时会出现错误。我也尝试增加堆栈大小。我也尝试将它放在主要功能中,它最终导致访问冲突!

请帮忙!

【问题讨论】:

  • 您确定您的调用约定是正确的并且您没有超出任何堆栈缓冲区吗?通常,当返回时违反函数访问时,我的第一反应是检查可能的堆栈损坏。您是否尝试过关注 ret 指令?当你到达那个 ret 时,检查堆栈指针引用的值。该值应该是调用此函数的调用之后的地址,如果它是其他任何东西(即 -1),您可能会以某种方式破坏堆栈。
  • 但是如果我使用 SimpleBlobDetector 的默认构造函数,它是否可以正常工作!鉴于您看到的代码,我可以通过任何方式破坏堆栈缓冲区吗?
  • 我不能说,同样,我可能错了返回地址错误,因为错误表示“正在读取”而不是执行。我的下一个猜测是在 SimpleBlobDetector 或 SimpleBlobParams 的析构函数中。调试器中的堆栈跟踪是什么样的? ntdll 中调用了什么函数?
  • 你可能是对的,它首先尝试解除分配 cv:KeyPoint 然后操作员删除(void * block)。之后是来自 ucrtbased.dll 和 ntdll.dll 的错误
  • @Erutan409 我的解决方案更多的是解决方法,我猜问题出在 VS2015 RC 的开发环境中;所以我复制了源文件并在更强大的 IDE VS2010 上创建了一个新的解决方案

标签: c++ visual-studio opencv visual-c++ visual-studio-2015


【解决方案1】:

我认为这可能是 VS2015 RC 的问题,我在 VS2010 上使用完全相同的代码创建了一个新项目,它就像魅力一样!

【讨论】:

  • 当您使用 VS 2015 进行测试时,您的 OpenCV 2.4.10 dll 是否也使用 Visual Studio 2015 构建?
  • 不,预建库。但是我已经在这个项目上使用 VS 2015 开发了一段时间,所有的 OpenCV 功能都运行良好。这就是这个问题令人费解的原因。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2015-10-31
  • 2016-09-15
相关资源
最近更新 更多