上村さん、応答ありがとうございます。 > > > if(sscanf(buf, "passed time /sec = %lu", ppass0 < 1 > > fprintf(stderr, "can't read pass0 ! \n"), exit(1); > > ほんとにこれでgccを通っているのですか? 左右のカッコの数が合ってないと > 思います。 なぜかVineLinux上のエディタからmozillaにテキストをコピー&ペーストできま せんで、リブートしたところできるようになったと思いきや、今度はコピー後に" ) "が消えてしまいます。気づいた箇所は直したのですが一部漏れ落ちました。失 礼を。しかしこのコピー&ペーストのトラブルは頭が痛いです。しかたがないので いまはMacで作業しております。 先のメールでpassをキャストする点を加えてあらためてソースの時間計測部分の みを示します。残念ながら pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; としてキャストを行っても依然、時間がおかしいです。ちなみに同一のソースが Mac上では異常を見せないことも相変わらずです。どこを疑うべきでしょうか? ttypedef unsigned long int time_passed; (略) void Read_tmp( const char *filename, const char *mode, int *pmax_series_set, int *pn_series_set, set **pseries_set, int *pmax_series_record, int *pn_series_record, int *poptimizesgl, record **pseries_record, int *pi_series_record, set *pnd_set, int *pstepmin, double *pratiomin, double *pep, int *pstepsgl, int *pstep, time_passed *ppass0 ); void Read_tmp( const char *filename, const char *mode, int *pmax_series_set, int *pn_series_set, set **pseries_set, int *pmax_series_record, int *pn_series_record, int *poptimizesgl, record **pseries_record, int *pi_series_record, set *pnd_set, int *pstepmin, double *pratiomin, double *pep, int *pstepsgl, int *pstep, time_passed *ppass0 ){ (中略) if (NULL == fgets(buf, sizeof(buf), fp)) exit(1); /*ppass0の読み込み*/ if (sscanf(buf, "passed time /sec = %lu", ppass0) < 1) fprintf(stderr, "can't read pass0 ! \n"), exit(1); printf("pass0 = %12u\n", *ppass0); (中略) } int main() { (中略) clock_t t0, t1; time_passed pass, pass0; (中略) if ('y' == icon){ Read_tmp( "tmp.CDsearch130_b", "rb", &max_series_set, &n_series_set, &series_set, &max_series_record, &n_series_record, &optimizesgl, &series_record, &i_series_record, &ndp_set, &stepmin, &ratiomin, &ep, &stepsgl, &step, &pass0 ); (中略) } else{ (中略) pass0 = 0; } t0 = t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; /*時間計測開始*/ printf("\n"); printf("***** START ! *****\n"); for (; ;){ if (optimizesgl == 0){ for (; ;){ for (; ;){ for (; ;){ /*時間計測*/ t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n"); (中略) } } if (i_series_record >= n_series_record){ /*時間計測*/ t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n"); (中略) } } } if (optimizesgl == 1){ for (; ;){ /*時間計測*/ t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n"); (中略) } } /*時間計測*/ t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0; printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n"); (中略) } /*計算全体を終了*/ printf("\nFinished !!\n"); return 0; } > > > if(sscanf(buf, "passed time /sec = %lu", ppass0) < 1) > fprintf(stderr, "can't read pass0 ! \n"), exit(1); > > のつもりではないのでしょうか? > > gccでエラーにならなかったとしたら > > if(sscanf(buf, "passed time /sec = %lu", ppass0 < 1)) > fprintf(stderr, "can't read pass0 ! \n"), exit(1); > > になっているのではないかとおもいますが...... > この場合多分実行時にエラー(Segmentation fault ?)になると思いますが。 > 理由は > > printf("value = %lu\n",ppass0 < 1); > > で表示される値で表されるアドレスにsscanfの結果を書き込むことになると > 思うからです。 > > 間違っていたら、識者の方フォローを宜しく... > > 尚、変数の定義のあたり、特にppass0の前後も省略しないで書いたほうが > アドヴァイスを受けやすいと思います。(原因がそのあたりにあるかも...) > > -- > ================================================== > 上村 岳明 Gakumei Kamimura > E-Mail:kami@xxxxxxxxxxxxxxxxxxx > TEL 03-5445-7059 / FAX 03-5445-7071 > JALインフォテック(株)ソリューション事業本部 -- 田中 元 BYH01337@xxxxxxxxxxx