Code Fix

Rustエラー 練習問題 170問(全問無料)

コンパイルエラー・実行時エラー・ロジックの誤りを、空欄補充で直す練習問題です。登録不要でその場で解けます。

エラーメッセージで探す

今出ているエラーメッセージをそのまま貼り付けてください。行番号や変数名が違っていても、エラーの種類が一致すれば見つかります。

エラー難易度種別
E0384: cannot assign twice to immutable variable の原因と直し方 #1 初級コンパイル
E0384: cannot assign twice to immutable variable の原因と直し方 #2 初級コンパイル
E0384: cannot assign twice to immutable variable の原因と直し方 #3 初級コンパイル
E0384: cannot assign twice to immutable variable の原因と直し方 #4 初級コンパイル
E0384: cannot assign twice to immutable variable の原因と直し方 #5 初級コンパイル
E0308: mismatched types(型の不一致)の原因と直し方 #1 初級コンパイル
E0308: mismatched types(型の不一致)の原因と直し方 #2 初級コンパイル
E0308: mismatched types(型の不一致)の原因と直し方 #3 初級コンパイル
E0308: mismatched types(型の不一致)の原因と直し方 #4 初級コンパイル
E0308: mismatched types(型の不一致)の原因と直し方 #5 初級コンパイル
末尾にセミコロンを付けると戻り値が () になり E0308 になる #1 初級コンパイル
末尾にセミコロンを付けると戻り値が () になり E0308 になる #2 初級コンパイル
末尾にセミコロンを付けると戻り値が () になり E0308 になる #3 初級コンパイル
末尾にセミコロンを付けると戻り値が () になり E0308 になる #4 初級コンパイル
末尾にセミコロンを付けると戻り値が () になり E0308 になる #5 初級コンパイル
index out of bounds パニックの原因と直し方 #1 初級実行時
index out of bounds パニックの原因と直し方 #2 初級実行時
index out of bounds パニックの原因と直し方 #3 初級実行時
index out of bounds パニックの原因と直し方 #4 初級実行時
index out of bounds パニックの原因と直し方 #5 初級実行時
called `Option::unwrap()` on a `None` value パニックの原因と直し方 #1 初級実行時
called `Option::unwrap()` on a `None` value パニックの原因と直し方 #2 初級実行時
called `Option::unwrap()` on a `None` value パニックの原因と直し方 #3 初級実行時
called `Option::unwrap()` on a `None` value パニックの原因と直し方 #4 初級実行時
called `Option::unwrap()` on a `None` value パニックの原因と直し方 #5 初級実行時
called `Result::unwrap()` on an `Err` value パニックの原因と直し方 #1 初級実行時
called `Result::unwrap()` on an `Err` value パニックの原因と直し方 #2 初級実行時
called `Result::unwrap()` on an `Err` value パニックの原因と直し方 #3 初級実行時
called `Result::unwrap()` on an `Err` value パニックの原因と直し方 #4 初級実行時
called `Result::unwrap()` on an `Err` value パニックの原因と直し方 #5 初級実行時
E0382: borrow of moved value(ムーブ後の値の使用)の原因と直し方 #1 初級コンパイル
E0382: borrow of moved value(ムーブ後の値の使用)の原因と直し方 #2 初級コンパイル
E0382: borrow of moved value(ムーブ後の値の使用)の原因と直し方 #3 初級コンパイル
E0382: borrow of moved value(ムーブ後の値の使用)の原因と直し方 #4 初級コンパイル
E0382: borrow of moved value(ムーブ後の値の使用)の原因と直し方 #5 初級コンパイル
E0369: cannot add `&String` to `&str` の原因と直し方 #1 初級コンパイル
E0369: cannot add `&String` to `&str` の原因と直し方 #2 初級コンパイル
E0369: cannot add `&String` to `&str` の原因と直し方 #3 初級コンパイル
E0369: cannot add `&String` to `&str` の原因と直し方 #4 初級コンパイル
E0369: cannot add `&String` to `&str` の原因と直し方 #5 初級コンパイル
E0425: cannot find value in this scope の原因と直し方 #1 初級コンパイル
E0425: cannot find value in this scope の原因と直し方 #2 初級コンパイル
E0425: cannot find value in this scope の原因と直し方 #3 初級コンパイル
E0425: cannot find value in this scope の原因と直し方 #4 初級コンパイル
E0425: cannot find value in this scope の原因と直し方 #5 初級コンパイル
整数同士の割り算 / が小数にならず切り捨てられる #1 初級ロジック
整数同士の割り算 / が小数にならず切り捨てられる #2 初級ロジック
整数同士の割り算 / が小数にならず切り捨てられる #3 初級ロジック
整数同士の割り算 / が小数にならず切り捨てられる #4 初級ロジック
整数同士の割り算 / が小数にならず切り捨てられる #5 初級ロジック
attempt to divide by zero パニックの原因と直し方 #1 初級実行時
attempt to divide by zero パニックの原因と直し方 #2 初級実行時
attempt to divide by zero パニックの原因と直し方 #3 初級実行時
attempt to divide by zero パニックの原因と直し方 #4 初級実行時
attempt to divide by zero パニックの原因と直し方 #5 初級実行時
E0596: cannot borrow as mutable の原因と直し方 #1 初級コンパイル
E0596: cannot borrow as mutable の原因と直し方 #2 初級コンパイル
E0596: cannot borrow as mutable の原因と直し方 #3 初級コンパイル
E0596: cannot borrow as mutable の原因と直し方 #4 初級コンパイル
E0596: cannot borrow as mutable の原因と直し方 #5 初級コンパイル
E0061: this function takes N arguments but M were supplied の原因と直し方 #1 初級コンパイル
E0061: this function takes N arguments but M were supplied の原因と直し方 #2 初級コンパイル
E0061: this function takes N arguments but M were supplied の原因と直し方 #3 初級コンパイル
E0061: this function takes N arguments but M were supplied の原因と直し方 #4 初級コンパイル
E0061: this function takes N arguments but M were supplied の原因と直し方 #5 初級コンパイル
if の条件式に整数を渡すと E0308(expected bool)になる #1 初級コンパイル
if の条件式に整数を渡すと E0308(expected bool)になる #2 初級コンパイル
if の条件式に整数を渡すと E0308(expected bool)になる #3 初級コンパイル
if の条件式に整数を渡すと E0308(expected bool)になる #4 初級コンパイル
if の条件式に整数を渡すと E0308(expected bool)になる #5 初級コンパイル
E0502: cannot borrow as mutable because it is also borrowed as immutable #1 中級コンパイル
E0502: cannot borrow as mutable because it is also borrowed as immutable #2 中級コンパイル
E0502: cannot borrow as mutable because it is also borrowed as immutable #3 中級コンパイル
E0502: cannot borrow as mutable because it is also borrowed as immutable #4 中級コンパイル
E0502: cannot borrow as mutable because it is also borrowed as immutable #5 中級コンパイル
for ループで Vec を直接回すと要素がムーブされる #1 中級コンパイル
for ループで Vec を直接回すと要素がムーブされる #2 中級コンパイル
for ループで Vec を直接回すと要素がムーブされる #3 中級コンパイル
for ループで Vec を直接回すと要素がムーブされる #4 中級コンパイル
for ループで Vec を直接回すと要素がムーブされる #5 中級コンパイル
attempt to subtract with overflow パニックの原因と直し方 #1 中級実行時
attempt to subtract with overflow パニックの原因と直し方 #2 中級実行時
attempt to subtract with overflow パニックの原因と直し方 #3 中級実行時
attempt to subtract with overflow パニックの原因と直し方 #4 中級実行時
attempt to subtract with overflow パニックの原因と直し方 #5 中級実行時
HashMapを存在しないキーで [] 添字アクセスすると no entry found for key パニックになる #1 中級実行時
HashMapを存在しないキーで [] 添字アクセスすると no entry found for key パニックになる #2 中級実行時
HashMapを存在しないキーで [] 添字アクセスすると no entry found for key パニックになる #3 中級実行時
HashMapを存在しないキーで [] 添字アクセスすると no entry found for key パニックになる #4 中級実行時
HashMapを存在しないキーで [] 添字アクセスすると no entry found for key パニックになる #5 中級実行時
move クロージャに取り込んだ値をクロージャの外で使うと E0382 になる #1 中級コンパイル
move クロージャに取り込んだ値をクロージャの外で使うと E0382 になる #2 中級コンパイル
move クロージャに取り込んだ値をクロージャの外で使うと E0382 になる #3 中級コンパイル
move クロージャに取り込んだ値をクロージャの外で使うと E0382 になる #4 中級コンパイル
move クロージャに取り込んだ値をクロージャの外で使うと E0382 になる #5 中級コンパイル
E0106: missing lifetime specifier の原因と直し方 #1 中級コンパイル
E0106: missing lifetime specifier の原因と直し方 #2 中級コンパイル
E0106: missing lifetime specifier の原因と直し方 #3 中級コンパイル
E0106: missing lifetime specifier の原因と直し方 #4 中級コンパイル
E0106: missing lifetime specifier の原因と直し方 #5 中級コンパイル
E0277: doesn't implement `std::fmt::Display` の原因と直し方 #1 中級コンパイル
E0277: doesn't implement `std::fmt::Display` の原因と直し方 #2 中級コンパイル
E0277: doesn't implement `std::fmt::Display` の原因と直し方 #3 中級コンパイル
E0277: doesn't implement `std::fmt::Display` の原因と直し方 #4 中級コンパイル
E0277: doesn't implement `std::fmt::Display` の原因と直し方 #5 中級コンパイル
E0072: recursive type has infinite size の原因と直し方 #1 中級コンパイル
E0072: recursive type has infinite size の原因と直し方 #2 中級コンパイル
E0072: recursive type has infinite size の原因と直し方 #3 中級コンパイル
E0072: recursive type has infinite size の原因と直し方 #4 中級コンパイル
E0072: recursive type has infinite size の原因と直し方 #5 中級コンパイル
range end index out of range for slice パニックの原因と直し方 #1 中級実行時
range end index out of range for slice パニックの原因と直し方 #2 中級実行時
range end index out of range for slice パニックの原因と直し方 #3 中級実行時
range end index out of range for slice パニックの原因と直し方 #4 中級実行時
range end index out of range for slice パニックの原因と直し方 #5 中級実行時
ブロック内でのシャドーイングは外側の変数に反映されない #1 中級ロジック
ブロック内でのシャドーイングは外側の変数に反映されない #2 中級ロジック
ブロック内でのシャドーイングは外側の変数に反映されない #3 中級ロジック
ブロック内でのシャドーイングは外側の変数に反映されない #4 中級ロジック
ブロック内でのシャドーイングは外側の変数に反映されない #5 中級ロジック
swap_remove は要素の順序を保証しない(remove との違い) #1 中級ロジック
swap_remove は要素の順序を保証しない(remove との違い) #2 中級ロジック
swap_remove は要素の順序を保証しない(remove との違い) #3 中級ロジック
swap_remove は要素の順序を保証しない(remove との違い) #4 中級ロジック
swap_remove は要素の順序を保証しない(remove との違い) #5 中級ロジック
byte index is not a char boundary パニックの原因と直し方 #1 中級実行時
byte index is not a char boundary パニックの原因と直し方 #2 中級実行時
byte index is not a char boundary パニックの原因と直し方 #3 中級実行時
byte index is not a char boundary パニックの原因と直し方 #4 中級実行時
byte index is not a char boundary パニックの原因と直し方 #5 中級実行時
already borrowed: BorrowMutError パニックの原因と直し方 #1 上級実行時
already borrowed: BorrowMutError パニックの原因と直し方 #2 上級実行時
already borrowed: BorrowMutError パニックの原因と直し方 #3 上級実行時
already borrowed: BorrowMutError パニックの原因と直し方 #4 上級実行時
already borrowed: BorrowMutError パニックの原因と直し方 #5 上級実行時
E0782: trait objects must include the `dyn` keyword の原因と直し方 #1 上級コンパイル
E0782: trait objects must include the `dyn` keyword の原因と直し方 #2 上級コンパイル
E0782: trait objects must include the `dyn` keyword の原因と直し方 #3 上級コンパイル
E0782: trait objects must include the `dyn` keyword の原因と直し方 #4 上級コンパイル
E0782: trait objects must include the `dyn` keyword の原因と直し方 #5 上級コンパイル
E0597: does not live long enough の原因と直し方 #1 上級コンパイル
E0597: does not live long enough の原因と直し方 #2 上級コンパイル
E0597: does not live long enough の原因と直し方 #3 上級コンパイル
E0597: does not live long enough の原因と直し方 #4 上級コンパイル
E0597: does not live long enough の原因と直し方 #5 上級コンパイル
E0004: non-exhaustive patterns の原因と直し方 #1 上級コンパイル
E0004: non-exhaustive patterns の原因と直し方 #2 上級コンパイル
E0004: non-exhaustive patterns の原因と直し方 #3 上級コンパイル
E0004: non-exhaustive patterns の原因と直し方 #4 上級コンパイル
E0004: non-exhaustive patterns の原因と直し方 #5 上級コンパイル
as によるダウンキャストは警告なしで値を切り捨てる #1 上級ロジック
as によるダウンキャストは警告なしで値を切り捨てる #2 上級ロジック
as によるダウンキャストは警告なしで値を切り捨てる #3 上級ロジック
as によるダウンキャストは警告なしで値を切り捨てる #4 上級ロジック
as によるダウンキャストは警告なしで値を切り捨てる #5 上級ロジック
ジェネリック関数に値を渡すと所有権がムーブされ2回使えない #1 上級コンパイル
ジェネリック関数に値を渡すと所有権がムーブされ2回使えない #2 上級コンパイル
ジェネリック関数に値を渡すと所有権がムーブされ2回使えない #3 上級コンパイル
ジェネリック関数に値を渡すと所有権がムーブされ2回使えない #4 上級コンパイル
ジェネリック関数に値を渡すと所有権がムーブされ2回使えない #5 上級コンパイル
E0284: type annotations needed の原因と直し方 #1 上級コンパイル
E0284: type annotations needed の原因と直し方 #2 上級コンパイル
E0284: type annotations needed の原因と直し方 #3 上級コンパイル
E0284: type annotations needed の原因と直し方 #4 上級コンパイル
E0284: type annotations needed の原因と直し方 #5 上級コンパイル
E0507: cannot move out of ... which is behind a shared reference #1 上級コンパイル
E0507: cannot move out of ... which is behind a shared reference #2 上級コンパイル
E0507: cannot move out of ... which is behind a shared reference #3 上級コンパイル
E0507: cannot move out of ... which is behind a shared reference #4 上級コンパイル
E0507: cannot move out of ... which is behind a shared reference #5 上級コンパイル
広告
広告スロット(未設定)

出題モード

まとめて解きたいときはこちら

このモードで始める

選んだモードは次の問題への移動にも適用されます。記録は端末内にのみ保存されます。

エラーの種類について

Rustのエラーは大きく3種類に分かれます。コンパイルエラーは、rustcが型検査や所有権・借用のチェックの段階で検出するもので、実行が一切始まりません。型の不一致や、値のムーブ後の再利用、借用ルール違反が代表例です。実行時パニックは構文・型・借用としては正しいものの、実行中に回復不能な状態になって強制終了するもので、配列の範囲外アクセスやunwrap()の失敗が代表例です。ロジックの誤りはどちらのエラーも出ませんが結果が期待と違うもので、swap_removeとremoveの取り違えなどが典型です。

Rustの大きな特徴は、他の言語なら実行時エラーになるはずのバグの多く(値のムーブ後の使用、複数の可変参照の同時存在など)を、実行前のコンパイル段階で止めてくれることです。このサイトのコンパイルエラー問題は、他言語であれば静かなバグとして残ってしまうケースを多く含んでいます。

初級から順に解く

広告
広告スロット(未設定)