Commit cdc5bbc0 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

fixed crash in I/O tests on Windows by making sure std::vector is non-empty…

fixed crash in I/O tests on Windows by making sure std::vector is non-empty before taking pointer to its elements
parent 32d72047
...@@ -2277,7 +2277,7 @@ public: ...@@ -2277,7 +2277,7 @@ public:
{ set((_Tp*)&vec.val[0], n, true); } { set((_Tp*)&vec.val[0], n, true); }
Vector(const std::vector<_Tp>& vec, bool _copyData=false) Vector(const std::vector<_Tp>& vec, bool _copyData=false)
{ set((_Tp*)&vec[0], vec.size(), _copyData); } { set(!vec.empty() ? (_Tp*)&vec[0] : 0, vec.size(), _copyData); }
Vector(const Vector& d) { *this = d; } Vector(const Vector& d) { *this = d; }
...@@ -2445,14 +2445,17 @@ dot(const Vector<_Tp>& v1, const Vector<_Tp>& v2) ...@@ -2445,14 +2445,17 @@ dot(const Vector<_Tp>& v1, const Vector<_Tp>& v2)
assert(v1.size() == v2.size()); assert(v1.size() == v2.size());
_Tw s = 0; _Tw s = 0;
const _Tp *ptr1 = &v1[0], *ptr2 = &v2[0]; if( n > 0 )
#if CV_ENABLE_UNROLLED {
for(; i <= n - 4; i += 4 ) const _Tp *ptr1 = &v1[0], *ptr2 = &v2[0];
s += (_Tw)ptr1[i]*ptr2[i] + (_Tw)ptr1[i+1]*ptr2[i+1] + #if CV_ENABLE_UNROLLED
(_Tw)ptr1[i+2]*ptr2[i+2] + (_Tw)ptr1[i+3]*ptr2[i+3]; for(; i <= n - 4; i += 4 )
#endif s += (_Tw)ptr1[i]*ptr2[i] + (_Tw)ptr1[i+1]*ptr2[i+1] +
for( ; i < n; i++ ) (_Tw)ptr1[i+2]*ptr2[i+2] + (_Tw)ptr1[i+3]*ptr2[i+3];
s += (_Tw)ptr1[i]*ptr2[i]; #endif
for( ; i < n; i++ )
s += (_Tw)ptr1[i]*ptr2[i];
}
return s; return s;
} }
...@@ -3012,7 +3015,7 @@ public: ...@@ -3012,7 +3015,7 @@ public:
size_t remaining1 = remaining/cn; size_t remaining1 = remaining/cn;
count = count < remaining1 ? count : remaining1; count = count < remaining1 ? count : remaining1;
vec.resize(count); vec.resize(count);
it->readRaw( string(fmt), (uchar*)&vec[0], count*sizeof(_Tp) ); it->readRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, count*sizeof(_Tp) );
} }
FileNodeIterator* it; FileNodeIterator* it;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment