2016-12-11 31 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

在main中,當你調用dtw時,i和j分別等於iG和jG,並且超出數組的範圍。

+0

那我到底該怎麼辦? –

+0

如果在dtw調用之前設置i = iG-1和j = jG-1,則不應該出現段錯誤。 – lucianopaz

+0

仍然不起作用 –