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; }
という「compile.txt」と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
という「run.txt」ができます。「error.txt」には実行したときにエラーが起きた行とエラーを起こした関数内の局所変数の値が以下のように記録されます。正しく実行されます p = b4b6df222aaabdc4
[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