2011-10-13 135 views
0

我在這裏回顧這段代碼:訪問衝突寫入位置誤差

#include <stdio.h> 
#include <gsl/gsl_rng.h> 
#include <gsl/gsl_randist.h> 
#include <gsl/gsl_permutation.h> 



int main () { 
    const long N = 10; 
    const gsl_rng_type *T = NULL; 
    gsl_rng *r = NULL; 

    gsl_permutation *p = NULL; 
    p = gsl_permutation_alloc (N); 
    gsl_permutation *q = NULL; 
    q = gsl_permutation_alloc (N); 

    gsl_rng_env_setup(); 
    T = gsl_rng_default; 
    r = gsl_rng_alloc (T); 

    printf ("initial permutation: "); 
    gsl_permutation_init (p); 
    gsl_permutation_fprintf (stdout, p, " %u"); 
    printf ("\n"); 

    printf (" random permutation:"); 
    gsl_ran_shuffle (r, p->data, N, sizeof(size_t)); 
    gsl_permutation_fprintf (stdout, p, " %u"); 
    printf ("\n"); 

    printf ("inverse permutation: "); 
    gsl_permutation_inverse (q, p); 
    gsl_permutation_fprintf (stdout, q, "%u"); 
    printf ("\n"); 

    gsl_permutation_free (p); 
    gsl_permutation_free (q); 

    return 0; 
} 

當我嘗試但是編譯它,我得到未處理的異常:訪問衝突寫入位置誤差。 我相信,我爲所有指針分配了內存,但是錯誤仍然存​​在。 我不太熟悉C,所以任何輸入將不勝感激。 P.S.當我使用調試器時,它指向這一行:gsl_permutation_fprintf (stdout, p, " %u"); 謝謝

編輯:我玩過代碼並意識到問題可能出現在標準輸出語句中。

回答

0

應該不是gsl_rng_env_setup();被稱爲第一?你以前做過幾次gsl_permutation_alloc