Name Not Found

情報工学を学ぶ理系大学生の雑記

【C言語】ctimeがsegmentation fault

C言語でクライアント・サーバー型のプログラムを作っていて、Macのローカルで開発した後にサーバプログラムをCentOSに移した時にctimeでハマったのでメモ。

経緯

  • クライアント・サーバ型のプログラム
  • Macのローカル環境で動かしたら問題なく動いた
  • 問題はサーバ側のプログラムを、別のCentOSに移すと生じた
  • ctimeの部分でsegmentation faultが発生した

問題

ctimeを使おうとするとsegmentation faultが生じる

原因

time.hをincludeしていなかった

問題となったプログラム

送受信日時を表示するために、以下のような形のプログラムを書いていました。

#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    struct timeval time;
    gettimeofday(&time, NULL);
    printf("%s", ctime((time_t *)&time));
}

これをMacコンパイルするとsegmentation faultは発生しません。が、しかし、CentOSコンパイルするとsegmentation faultが発生します。

このプログラムに

#include <time.h>

を加えてあげることでCentOSでも問題なく動くようになります。同じようなことで困っている方が居てお役に立てれば。

(includeし忘れはコンパイル時にエラーが出るとばかり思い込んでいたので気づきませんでした。。。(;´д`)トホホ…

思うところ

今回のMacOSでは実行できたのは、gccと打っていても裏ではclangが動いているからかな―。と想像してます。Mavericksからgccはclangのエイリアスとなったようなので。

きっとclangがよろしくやってくれていたのでしょう。

どうなんでしょ。