2011-10-13 93 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