🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1723閲覧

rustで配列のインデックス外にアクセスした場合のエラータイミング

kiduki

総合スコア9

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2019/09/30 15:08

rustで配列のインデックス外アクセスした場合のエラータイミングを知りたい

前提

現在、以下のサイトを参考にRustの勉強を行っています。

Data Types - The Rust Programming Language

上記のサイトで

What happens if you try to access an element of an array that is past the end of the array? Say you change the example to the following code, which will compile but exit with an error when it runs:

(配列の要素外にアクセスすると、コンパイルは通りますが実行時にエラーが発生します。)
とあります。

実際に以下のコードをcargo runするとエラーが発生しました

rust

1fn main() { 2 let a = [1, 2, 3, 4, 5]; 3 println!("{}",a[10]); 4}

Cargo run(エラー)

Compiling data-types v0.1.0 (/home/kiduki/projects/data-types) error: index out of bounds: the len is 5 but the index is 10 --> src/main.rs:25:19 | 25 | println!("{}",a[10]); | ^^^^^ | = note: #[deny(const_err)] on by default error: aborting due to previous error error: Could not compile `data-types`.

上記エラーを見ると1行目(Compiling ~)すぐ後にエラーが発生していたため、コンパイルのタイミングでエラーが発生しているのではと思い、cargo checkを実行すると正常にチェックを通りました。

Cargo check(正常終了)

Checking data-types v0.1.0 (/home/kiduki/projects/data-types) Finished dev [unoptimized + debuginfo] target(s) in 0.10s

なので、コンパイルは通るのだろうと思い、cargo buildを実行するとエラーが発生しました!

Cargo build(エラー)

Compiling data-types v0.1.0 (/home/kiduki/projects/data-types) error: index out of bounds: the len is 5 but the index is 10 --> src/main.rs:3:19 | 3 | println!("{}",a[10]); | ^^^^^ | = note: #[deny(const_err)] on by default error: aborting due to previous error error: Could not compile `data-types`.

質問

配列のインデックス外にアクセスした際のエラーは、コンパイルのタイミングに起こっているのでしょうか。あるいは、ドキュメントの通り実行時にエラーは起こっており、Cargo buildはバックグラウンドでファイルを実行しているのでしょうか。
ご教示お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

What happens if you try to access an element of an array that is past the end of the array? Say you change the example to the following code, which will compile but exit with an error when it runs:

手元で確認してみたところ、1.27まではこの挙動でコンパイル時には警告を出すだけですが、1.28以降はコンパイル時にエラーになるようです。ドキュメントが更新されていないようですね。

追記

元のコードのようにindexを変数にするとdocument通りにコンパイルは通り、実行時に失敗するようになります。

投稿2019/09/30 15:42

編集2019/09/30 15:56
termoshtt

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiduki

2019/09/30 16:16

私がドキュメントを読めていなかっただけですね。お恥ずかしい。。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問