为什么我在输入超出范围例外时出现错误?

问题描述:

int bNum=3; 
int aNum=3; 
for (int i = 0; i < bNum; i++) 
     { 
      for (int j = 0; j < aNum; j++) 
      { 
       b[i] += a[j]; 
       b[i + 1] += a[j + 3]; 
       b[i + 2] += a[j + 6]; 
      } 
     } 

我基本上希望发生的以下内容:为什么我在输入超出范围例外时出现错误?

b[0]=a[0]+a[1]+a[2]; 
b[1]=a[3]+a[4]+a[5]; 
b[2]=a[6]+a[7]+a[8]; 

什么是错我的逻辑是什么?

哈哈! OOPS!我困倦的眼睛正在解释这个愚蠢的问题。我发现在每次迭代中它都会被多次计算。

+4

数组的大小是多少?那'i + 3'可能会超过它。 – 2012-07-31 09:45:29

+0

C++或C#?..... – Nawaz 2012-07-31 09:45:43

+0

您正在使用'b [i + 6]'作为索引。我假设你的意思是'b [2] = a [j + 6]' – dtsg 2012-07-31 09:47:57

它是任何一种语言,你需要为B常数指数,可变折射率的

for (int j = 0; j < aNum; j++) 
     { 
      //here is loop-unrolling for b 
      b[0] += a[j]; 
      b[1] += a[j + 3]; 
      b[2] += a[j + 6]; 
     } 



    for(k=0;k<max;k++) 
    { 
    for (int j = 0; j < aNum; j++) 
     { 
      //without loop-unrolling 
      b[k] += a[j+k*3]; 

     } 
    } 

我所做的“K”环外让它读一个为连续[]越好。你可以在内部做“k”循环,但是它会使[]从这里跳到那里,然后再次跳回到这里,这会让它变慢。 这不是一个矢量虽然:我只是用它来填补空间

+0

谢谢!我真的很累,不能直视。但我喜欢你的矢量化的想法! – 2012-07-31 09:56:42

这个问题是一种矛盾词典。 两个数组的长度长度相等,但要求不相等。

假设requeirement是正确的,你可以做以下

b元素有一个总和的a

int bNum=3;  
int aIndex = 0; 
for (int i = 0; i < bNum; i++) 
{ 
    for (int j = 0; j < 3; j++)  
     b[i] += a[aIndex ++]; 

} 
下一个 3个要素

这里没有任何数组边界控制。这只是一个示例自然代码。

如果这不是你正在寻找的,请澄清。