2015-09-17 25 views
0

我正在为奥林匹克编程,我正在研究一些算法问题。一个非常愚蠢和奇怪的错误遇到。出于某种原因,我无法使用输出文件。我试着打开一个旧的项目,一切工作正常,但每当我创建一个新的项目它会被打破。我从来没有见过这个问题,我做了很多的代码块的,这里是代码,虽然我不认为这个问题是从我的代码:CodeBlocks C++输出文件

#include<stdio.h> 
using namespace std; 
const int N = 18; 
int sol = 0, a[N], s, n; 
bool numere[N]; 
void bkt (int v[]) 
{ 
    int i, nr, j; 
    for (i = 1; i <= n; i++) 
    { 
     if (numere[a[i]] == false) 
     { 
      nr = a[i]; 
      numere[a[i]] = true; 
      v[0] = 1; 
      for (j = 0; j + nr <= s; j++) 
       if (v[j] != 0) 
        v[j] += 1; 
      for (j = 1; j <= s; j++) 
       sol += v[j]; 
      bkt (v); 
      for (j = 0; j + nr <= s; j++) 
       if (v[j] != 0) 
        v[j] -= 1; 
      numere[a[i]] = false; 
     } 
    } 
} 
int main() 
{ 
    FILE *in, *out; 
    in = fopen ("monezi.in", "r"); 
    out = fopen ("monezi.out", "w"); 
    fscanf (in, "%d%d", &n, &s); 
    int i; 
    for (i = 0; i < n; i++) 
     fscanf (in, "%d", &a[i]); 
    int v[18]; 
    for (i = 0; i <= 18; i++) 
     v[i] = 0; 
    bkt (v); 
    fprintf (out, "dds"); 
    return 0; 
} 
+2

提到错误语句或编译器消息。 –

+0

无,这是问题所在。 –

+2

@DanC好吧,你永远不会叫'fclose(out);'。 –

回答

2

在这段代码的问题是:你有decalred int v[18];大小为18(0〜17)的数组和循环for (i = 0; i <= 18; i++)导致非法内存访问。它应该是:

for (i = 0; i < 18; i++)

+0

谢谢,这样一个愚蠢的错误。 –