2013-05-10 45 views
0

大小我寫計算陣列和這種陣列本身之間外差的函數,並且只保存那些陽性結果(見下面的代碼)有一種方法,以確定陣列的基於叔

void outer_pos(double *x, int *n, double *output){ 
    int i, j, l; 
    for(i=0, l=0; i<*n; i++){ 
     for(j=0; j<*n; j++){ 
      if((x[j]-x[i])>0){ 
       output[l+1]=x[j]-x[i]; 
       output[0]=(double)(++l); 
      } 
     } 
    } 
} 

然後,在下面的函數中,我打電話outer_pos。一個問題是數組xouter可能包含綁定值。如果沒有連接值,則正數差異的數量是(nsamp)(* nsamp-1)/ 2,但是具有連接值時,實際數量會更小。所以我想知道是否有什麼方法可以聲明v1v2,這樣的大小取決於outer_pos的結果。我主要使用R,它不需要你初始化數組,所以我不知道如何能在C.做

void foo(double *x, double *y, int *nsamp){ 
    int i, j, k, oper=2, l; 
    double* result=malloc(sizeof(double)*((*nsamp)*(*nsamp-1)/2 + 1)); 
    double* xouter=malloc(sizeof(double)*(*nsamp)); 

    for(i=0;i<*nsamp;i++) 
     xouter[i]=x[i]+y[i]; 

    outer_pos(xouter, nsamp, &result[0]); 

    free(xouter);  
     . 
     . 
     . 
     . 
} 
+0

使用malloc C代碼應該工作。結果是什麼? – 2013-05-10 14:21:52

+0

你的意思是'outer_pos'的結果是什麼?基本上我的意思是我想'v1v2'的大小爲'l'(注意'outer_pos'中的計數器)。如果有綁定的值,那麼'l'會比'* nsamp *(* nsamp-1)/ 2'小。但是現在我基本上把v1v2的長度聲明爲'* nsamp *(* nsamp-1)/ 2',而不管它需要的實際大小。 – Alex 2013-05-10 14:45:46

回答

1
  1. 嘗試釋放calloc()代替malloc和分配存儲器所述outer_pos(內部輸出)

    void outer_pos(double *x, int *n, double *output){ 
        int i, j, l; 
        &output[0]=malloc(sizeeof(double)); 
        for(i=0, l=0; i<*n; i++){ 
         for(j=0; j<*n; j++){ 
          if((x[j]-x[i])>0){ 
           &output[l+1]=malloc(sizeeof(double)); 
           output[l+1]=x[j]-x[i]; 
           output[0]=(double)(++l); 
          } 
         } 
        } 
    } 
    
+0

我需要在'foo()'裏面做些什麼?換句話說,我應該如何聲明'v1v2'? – Alex 2013-05-10 15:09:27

相關問題