2015-09-17 27 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

謝謝,這樣一個愚蠢的錯誤。 –