我有一个场景
int N3 =7000
temp =(int*)malloc(sizeof(int )*N3);
for(unsigned int i=0;i<N3;i++)
{
temp[i]=i;
}
temp = temp +10;
__m128i* array= reinterpret_cast<__m128i*>(temp);
int length = N3/4;
for(unsigned int i=0;i<length;i++)
{
__m128i answer= _mm_loadu_si128(&array[i]);
}
我认为这里会发生内存溢出。我们如何才能避免这种错误。
答案 0 :(得分:1)
执行块时:
temp = temp +10;
__m128i* sse_array = reinterpret_cast<__m128i*>(temp);
int length = N3/4;
for(unsigned int i=0;i<length;i++)
{
__m128i result = _mm_loadu_si128(&sse_array[i]);
}
您正在对temp+10
进行处理temp
。当for
循环结束时,您访问的内容超过10*sizeof(int)
内存位置分配的内存。
<强> PS 强>
在计算4
时,请勿使用硬编码的数字,例如length
。使用:
int length = N3*sizeof(int)/size(__m128i);