C++ visual c+中SSE编程中的异常+;
我在Visual Studio 2012中编写了这些简单的C++代码用于SSE编程,但是当我运行时,异常符合C++ visual c+中SSE编程中的异常+;,c++,visual-studio-2012,sse,intrinsics,C++,Visual Studio 2012,Sse,Intrinsics,我在Visual Studio 2012中编写了这些简单的C++代码用于SSE编程,但是当我运行时,异常符合 void SSE( float* pArray1, // [in] first source array float* pArray2, // [in] second source array float* pResult,
void SSE(
float* pArray1, // [in] first source array
float* pArray2, // [in] second source array
float* pResult, // [out] result array
int nSize) // [in] size of all arrays
{
int nLoop = nSize/ 4;
__m128 m1, m2, m3, m4;
__m128* pSrc1 = (__m128*) pArray1;
__m128* pSrc2 = (__m128*) pArray2;
__m128* pDest = (__m128*) pResult;
for ( int i = 0; i < nLoop; i++ )
{
m1 = _mm_mul_ps(*pSrc1, *pSrc1); // m1 = *pSrc1 * *pSrc1
m2 = _mm_mul_ps(*pSrc2, *pSrc2); // m2 = *pSrc2 * *pSrc2
m3 = _mm_add_ps(m1, m2); // m3 = m1 + m2
*pDest = m3;
pSrc1++;
pSrc2++;
pDest++;
}
}
int main( int argc, char** argv ) {
float* A=new float[20];
float* B=new float[20];
float* C=new float[20];
for(int i=0;i<20;i++)
{
A[i]=B[i]=C[i]=i;
}
SSE(A,B,C,20);
cout<<C;
return 0;
}
您的阵列没有按照SSE要求对齐-这可能是未定义的行为。如果代码崩溃,您可以对其进行调试并查看崩溃的确切位置。另请参见:@user,到底是什么解决了这个问题?让评论者知道他们中的哪一个最终对你帮助最大,然后他们可以发布答案,你选择它作为解决方案。
Unhandled exception at 0x00CA29BE in SSE.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF.