2014-03-02 22 views
0

我在与这个码的问题:码块C++异常

#include<iostream> 
#include<vector> 
#include<algorithm> 
#include<math.h> 

using namespace std; 

long long addV(int i) { 
    return pow(10,i); 
} 

int len; 

void recurse(int n,long long &ways,int values[],int current=0,int p=0) { 
    if(p>len) return; 
    if(current>n) return; 
    if(current ==n) { 
     ways++; 
     return; 
    } 
    int cv = n-current; 
    cv/=values[p]; 

    for(int i=0;i<=cv;i++) { 
    recurse(n,ways,values,current+values[p]*i,p+1); 
    } 
} 


int main() { 
    int n; 
    cin>>n; 
    long long ways=0; 
    int values[] ={1,2,3}; 
    len = sizeof(values)/sizeof(int); 
    recurse(n,ways,values); 
    cout<<ways; 
} 

的异常来自(CV/=值[P])线。当然,低劣的CodeBlocks永远不会显示异常情况。我相信它的东西很容易修复。

+0

使用'try/catch'。 – PersianGulf

+0

你能告诉我使用try/catch的例子吗?我还没有用它在C++ – user2919973

+0

http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm – PersianGulf

回答

1
if(p>len)return; 

确实,您在p == len时已经访问了边界。您需要返回一次p >= len

1

因为您递归的结束条件是p > len这意味着p将在零到三(含)的范围内。正如你所知,一个由三个条目组成的数组的索引范围从零到两。

+0

哦,这真的很愚蠢的错误,谢谢 – user2919973