2

-pg -ggdb でコンパイルすると正常に動作していたコードがありますが、現在クラッシュする原因がわかりません。2 つのオプションを省略すると、問題なく動作します。何が原因でしょうか?

これがgccへの呼び出しです

gcc -std=gnu99  -fopenmp  -pg  -O0  main.c Simulation.c Lattice.c Substrate.c
Adsorbate.c  -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -L/usr/local/atlas/lib 
-I/usr/local/atlas/include/   -I/usr/local/include -L/usr/local/lib -lgsl -lgslcblas
-lglib-2.0  -lm

たとえば、実行中のコードを提供する gcc の呼び出しは次のとおりです。

gcc -std=gnu99  -fopenmp -fexpensive-optimizations -ffast-math -fomit-frame-pointer
-O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse  -march=corei7  -mtune=corei7   main.c
Simulation.c Lattice.c Substrate.c Adsorbate.c  -I/usr/include/glib-2.0 -I/usr/lib6
/glib-2.0/include -L/usr/local/atlas/lib -I/usr/local/atlas/include/   -I/usr/loca
/include -L/usr/local/lib -lgsl -lgslcblas  -lglib-2.0  -lm

main.c ファイルの先頭は次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Lattice.h"
#include "Substrate.h"
#include "Adsorbate.h"
#include "Simulation.h"
#include <glib.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
#include <assert.h>
#include <omp.h>

/*  Units are:
*   [x] = Angstrom
*   [m] = amu
*   [t] = psec
*   [T] = K
*
*   1[x]/[t] = 100 m/sec    1m/sec = 0.01 [x]/[t]
*   1[E] = 1.03584E-4 eV    1eV = 9654 [E]
*   1[F] = 1.66E-13 N       1N = 602.41E10 [F]
*
*   k = 9036.1446 [F]/[x]
*   Kb = 0.83192 [E]/[T]
*   A = 1303.3[E]
*   b = 0.875 1/[x]
*   R0 = 3.3 [x]

*
*/
int main(int argc, char **argv)
{

    // Start simulation
    int numcores = omp_get_num_procs(); // get number of available processors
    omp_set_num_threads(numcores-1); // leave one core free
    struct Parameters * P;
    struct Lattice * restrict  lfcc ;
    lfcc = (struct Lattice*)malloc(sizeof(struct Lattice));
    P = (struct Parameters*)malloc(sizeof(struct Parameters));
    if (argc<2) {fprintf(stderr,"\n*****\tPlease supply in the command line a Perameters file\t*****\n"); exit(1);}
    char * pfile = argv[1];
    Init_Simulation(lfcc, P, argc, pfile);
4

1 に答える 1

1

障害は、ユーザーからいくつかのパラメーターを取得するために glib によって解析されるファイルを受け入れる次の関数にありました。コメントアウトされた行は、バグが隠れている行です。私はそれらを必要としなかったので(テストのために以前に挿入されていました)、それらを削除しましたが、コードは正常に動作します。

void Get_Data_File(char * datafile, struct  Parameters * P)

{
  P->Datafile = g_key_file_new ();
  g_key_file_load_from_file (P->Datafile, datafile, 0, NULL);
//       char ** Groups;
//       size_t * l;
//       Groups = g_key_file_get_groups (P->Datafile, l);
//       int k = 0;
//       char * group = Groups[0];      
}
于 2012-09-03T09:39:02.990 に答える