我在操作较大内存区域时(512*512*236个short型数据的区域),出现了上述异常。
语法没有任何问题,而且也不存在访问越界或者没有分配到内存的情况:
for (int i = 0; i < 236; i++) {
for (int j = 0; j < 512*512; j++) {
if(dataAddress[i][j] >= 1500)
dataAddress[i][j] = (short)1600;
if(dataAddress[i][j] < 1300)
dataAddress[i][j] = (short)1300;
}
}
所以可能原因是编译器进行了优化,导致多核CPU访问时出现冲突。
解决办法:要么改改程序,不要使用大型内存块,要么多运行几次,比如我这个程序,大概运行7次能正确执行一次