我在运行以下代码时观察到异常(Microsoft C++ 异常:内存位置 0x000000000028C510 处的 cv::Exception。):
cv::Mat a(5,60, CV_32FC1);
cv::Mat b(60,5, CV_32FC1);
cv::Mat c = a*b;
cv::Mat d(5, 60, CV_32FC1);
cv::Mat e(60,5, CV_32FC1);
cv::Mat f = d*e;
Run Code Online (Sandbox Code Playgroud)
执行第三行代码时抛出异常:
cv::Mat c = a*b;
Run Code Online (Sandbox Code Playgroud)
之后不再发生( cv::Mat f = d*e; 不再抛出)。调试将我引导到以下 opencv 的功能:
inline
MatExpr::operator Mat() const
{
Mat m;
op->assign(*this, m);
return m; <- this is supposed to throw the exception
}
Run Code Online (Sandbox Code Playgroud)
如果我写:
auto c = a*b;
Run Code Online (Sandbox Code Playgroud)
而不是抛出异常,而是在最后一次调用时抛出:
cv::Mat f = d*e;
Run Code Online (Sandbox Code Playgroud)
仅在调试模式下和使用opencv 3.0或3.1时才会抛出异常。在发布模式或使用 opencv 2.4 时不会抛出异常。 …
我正在尝试从 Windows 寄存器中写入和读取:
写作:
std::string path = "c:\\"
LPCTSTR str_data = TEXT(path.c_str());
auto size = static_cast<DWORD>(strlen(str_data));
LONG setRes = RegSetValueEx(*key, TEXT("DumpFolder"), 0, REG_EXPAND_SZ, (LPBYTE)str_data, size);
Run Code Online (Sandbox Code Playgroud)
读:
char str_data[1028];
DWORD keyType;
DWORD size;
auto sk = TEXT("SOFTWARE\\Microsoft\\Windows\\Windows Error reporting\\LocalDumps");
auto status = RegGetValue(HKEY_LOCAL_MACHINE, sk, TEXT("DumpFolder"), RF_RT_REG_EXPAND_SZ, &keyType, str_data, &size);
Run Code Online (Sandbox Code Playgroud)
写入似乎工作正常,至少它在 regedit.exe 中看起来不错。
读取失败,ERROR_INVALID_PARAMETER = 87。如果我将 RF_RT_REG_EXPAND_SZ 更改为 RRF_RT_ANY,它可以在调试模式下工作,但在发布时仍然失败,错误代码为 ERROR_MORE_DATA = 234。我尝试过:
std::string path = "c:\\";
path = path + "\0" (it should be null terminated anyway
Run Code Online (Sandbox Code Playgroud)
但它没有帮助
更新
首先,感谢您的回答,我现在对这件事有了更好的了解。不幸的是,我仍然无法成功读取字符串。
以下是结合以下答案的测试示例:
HKEY …Run Code Online (Sandbox Code Playgroud)