2016-12-11 6 views
-1
#include <stdio.h> 
#include <stdlib.h> 

double dtw(int ,int ,double*,double*); 

int main(void){ 
    int iG,jG,i,j; 

    double dtwtemp; 
    printf("give the 1st size : "); 
    scanf("%d",&iG); 
    printf("\n"); 
    printf("give the 2st size : "); 
    scanf("%d",&jG); 
    printf("\n"); 

    double *a=malloc(iG*sizeof(double)); 
    double *b=malloc(jG*sizeof(double)); 

    for(i=0;i<iG;i++){ 
     printf("give %d number of first table ",i+1); 
     scanf("%lf",&a[i]); 
     printf("\n"); 
     } 
     printf("----------------\n"); 
    for(j=0;j<jG;j++){ 
     printf("give %d number of second table ",j+1); 
     scanf("%lf",&b[j]); 
     printf("\n"); 
     } 
    for(i=0;i<iG;i++){ 
     printf("%.2f ",a[i]);} 
     printf("\n"); 
    for(j=0;j<jG;j++){ 
     printf("%.2f ",b[j]);} 

    dtw(i,j, &a , &b); 

} 


double dtw(int i ,int j ,double *a ,double *b){ 

    double dtwmin,dtwtemp; 

    dtwtemp=(a[i]-b[j])*(a[i]-b[j]); 

    if (i>1){ 
     if (j>1){ 
      dtwmin=dtw(i,j,&a[(i-1)],&b[j]); 
      if (dtwmin>dtw(i,j,&a[i],&b[(j-1)])) 
       dtwmin=dtw(i,j,&a[i],&b[(j-1)]); 
      if (dtwmin>dtw(i,j,&a[(i-1)],&b[(j-1)])) 
       dtwmin=dtw(i,j,&a[(i-1)],&b[(j-1)]); 
     } 
     else 
      dtwmin=dtw(i,j,&a[(i-1)],&b[1]);  
    } 
    else{ 
     if (j>1) 
      dtwmin=dtw(i,j,&a[1],&b[(j-1)]); 
     else 
      dtwmin=dtw(i,j,&a[1],&b[1]); 
} 
return dtwtemp+dtwmin ;} 

誰かが助けてください、セグメンテーションフォルトが表示され、何が起こっているのか分かりません。テーブルの距離を検出するプログラム

+0

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen

答えて

0

メインでは、dtwを呼び出すとjはそれぞれiGとjGに等しく、配列の範囲外です。

+0

どうすればいいですか? –

+0

dtw呼び出しの直前にi = iG-1とj = jG-1を設定した場合、segfaultを取得すべきではありません。 – lucianopaz

+0

まだ動作していません –