2016-06-01 9 views
1

Iグローバル2次元配列を宣言するときhttp://www.spoj.com/problems/EDIST/を解決しながら(http://ideone.com/jG3jPWspojの "Edit distance"で2次元配列を宣言すると、ランタイムエラーが発生しますか?

#include <iostream> 
using namespace std; 

long long int s[2001][2001]; 

int main() { 
int t; 
string a,b; 
long long int i,j; 
for(i=0;i<2001;i++) 
{ 
    s[i][0]=i; 
    s[0][i]=i; 
} 
cin>>t; 
while(t>0) 
{ 
    cin>>a>>b; 
    t--; 
    for(i=1;i<=a.length();i++) 
    { 
     for(j=1;j<=b.length();j++) 
     { 
      if(a[i-1] == b[j-1]) 
       s[i][j]=s[i-1][j-1]; 
      else 
       s[i][j] = min(min(s[i-1][j],s[i-1][j-1]),s[i][j-1]) + 1; 
     } 
    } 
    cout<<s[i-1][j-1]<<"\n"; 
} 
return 0; 
} 

エラーが発生しません。私はローカルに同じ配列(http://ideone.com/Tyj6UU)を宣言する場合でも、

#include <iostream> 
using namespace std; 


int main() { 
int t; 
string a,b; 
long long int i,j; 

long long int s[2001][2001]; //declared locally 

for(i=0;i<2001;i++) 
{ 
    s[i][0]=i; 
    s[0][i]=i; 
} 
cin>>t; 
while(t>0) 
{ 
    cin>>a>>b; 
    t--; 
    for(i=1;i<=a.length();i++) 
    { 
     for(j=1;j<=b.length();j++) 
     { 
      if(a[i-1] == b[j-1]) 
       s[i][j]=s[i-1][j-1]; 
      else 
       s[i][j] = min(min(s[i-1][j],s[i-1][j-1]),s[i][j-1]) + 1; 
     } 
    } 
    cout<<s[i-1][j-1]<<"\n"; 
} 
return 0; 
} 

実行時エラーが発生します。どうして?

+4

ヒント:このウェブサイトの名前は何ですか? – feersum

+0

ヒント: 'std :: vector'を使用して、必要なだけのスペースを必要とし、動的メモリ割り当てを使用します。これは、一般にはるかに大きなメモリプールです。 – NathanOliver

答えて

0

メモリの割り当てに何らかの問題があるようです。 2番目のアプローチでは

(すなわち、ローカル宣言を有するもの)、変化:

long long int s[2001][2001]; 

には:

long long int ** s = new long long int * [2001]; 
for (i=0;i<2001;i++) 
    s[i] = new long long int[2001]; 

これはあなたの問題を解決します。

+0

しかし、なぜ配列を使用しているとメモリ割り当てにエラーが発生していますか?私は正確な問題を知りたがっていました。 –

関連する問題