上村さん、応答ありがとうございます。
>
> > 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