2011-10-13 2 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에 너무 익숙하지 않아 모든 입력을 환영 할 것입니다. 오후 8시 30 분 P.S. 디버거를 사용하면 다음 줄을 가리키고 있습니다. gsl_permutation_fprintf (stdout, p, " %u"); 감사합니다.

편집 : 코드를 가지고 놀았으며 문제가 stdout 문에있을 수 있다는 것을 알았습니다.

답변

0

gsl_rng_env_setup();을 먼저 불러야합니까? 당신은 전에 gsl_permutation_alloc 몇 가지 않습니다.