opencv坎坷之路

问题1:内存分配不足

运行opencv时会出现内存分配不足的情况:如下图所示
这里写图片描述
OpenCV Error: Insufficient memory (Failed to allocate ……. )
一般也会伴随着错误提示:Unhandled exception at at 0x76D85B68 in DEVISIGN_read.exe: Microsoft C++ exception: cv::Exception at memory location 0x0098EDDC.

开始想自己电脑32G内存,打开任务管理器,内存使用率还不到20%,很不理解为什么出现这个内存不足以分配的问题。经过查找资料,发现VS的配置是32位,VS分配是有限制的。那么一次性最多分类4GB内存,当需要不断分配内存很多时(处理视频),可能就不足了。这个时候将VS的opencv重新配置为64位的,就可以解决内存分配不足的问题了。

问题2:错误 14 error C2589: “(”:“::”右边的非法标记 和 错误 15 error C2059: 语法错误:“::”

1.错误代码:

const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT);

2.错误原因分析:

std::min()的原意是找到std标准库(C++定义的标准库)中min的函数模板

        // TEMPLATE FUNCTION min
template<class _Ty> inline

    _Post_equal_to_(_Right < _Left ? _Right : _Left)

    const _Ty& (min)(const _Ty& _Left, const _Ty& _Right)
    {   // return smaller of _Left and _Right
    return (_DEBUG_LT(_Right, _Left) ? _Right : _Left);
    }

但由于全局的宏的存在,优先级比作用域操作符::高,发生冲突,会使用min的宏定义:

#define min(a,b)            (((a) < (b)) ? (a) : (b))

如果使用宏定义,那么前面的作用域操作符::就使用错误了,出现以上的语法错误。

3.解决方案

消除歧义,将min指向std下的函数模板就可以。
第一种解决方案:给std::min加上括号(std::min),与min宏定义区分开.
第二种解决方案(限于使用VS开发),设置项目属性为不适用min宏定义,操作如下:

 项目属性   ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关   NOMINMAX)

http://blog.csdn.net/ben_ben_niao/article/details/45971095

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值