Ex 88,89の入力に対応済み. compile.txtが空またはエラー無しでrun.txtが無い場合、提出プログラムの実行が終了していないことがあるので、ブラウザの「再読込」を押すとrun.txtが出てくることがあります。 malloc()で確保されたメモリがプログラム終了時にfree()で解放されていない場合、原則として減点されます。7月1 4日以降は本検査システムがfree()し忘れをrun.txt末尾で指摘するようになります。



gcc 10 (Windows版Eclipseとほぼ同じコンパイラ) を使用し、-std=iso9899:2017 オプションを付け2018年のISO規格に準拠してコンパイルした結果を「compile.txt」というファイルに保存し、コンパイルしてできた実行ファイルを実行した結果を「run.txt」というファイルに保存します。実行途中にエラーが起きて止まった場合は止まった位置が「error.txt」に記録されます。実行ファイルにキーボードからの入力を与えることは現状ではできません。また符号付き整数の掛け算が桁溢れを起こすなど、計算の結果が曖昧になると実行時にエラーが起きるようにしてあります。30秒で実行が終わらないプログラムは強制終了されます。また本来のCPUの1/16しか使えないため実行はとてつもなく遅いです。このサーバーの処理が重い場合やサーバーが落ちている場合 http://153.240.174.134:64193/ を代わりに使って下さい。


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int *p;
  unsigned long long random_number = rand();
  setvbuf(stdout, NULL, _IOLBF, 0); /* この行を除くとエラーが起きたときに結果がrun.txtに入りません */
  p = 4* random_number* random_number; /* 「4*」を削除すると実行結果が変わります */
  printf("正しく実行されます p = %tx\n", p);
  printf("エラーが起きます *p = %d\n", *p);
  return 0;
}
というプログラムを投入すると、
program.c: In function ‘main’:
program.c:9:5: warning: assignment to ‘int *’ from ‘long long unsigned int’ makes pointer from integer without a cast
    9 |   p = 4* random_number* random_number; /* 「4*」を削除すると実行結果が変わります */
      |     ^
program.c:10:45: warning: format ‘%tx’ expects argument of type ‘unsigned ptrdiff_t’, but argument 2 has type ‘int *’
   10 |   printf("正しく実行されます p = %tx\n", p);
      |                                  ~~^     ~
      |                                    |     |
      |                                    |     int *
      |                                    long unsigned int
      |                                  %ls
という「compile.txt」と
正しく実行されます p = b4b6df222aaabdc4
という「run.txt」ができます。「error.txt」には実行したときにエラーが起きた行とエラーを起こした関数内の局所変数の値が以下のように記録されます。
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x0000000000495489 in main () at program.c:11
11	  printf("エラーが起きます *p = %d\n", *p);
#0  0x0000000000495489 in main () at program.c:11
p = 0xb4b6df222aaabdc4
random_number = 1804289383

問い合わせは松本へ