teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

「訂正」の文章を追記しました

2021/08/07 13:03

投稿

tatsuya6502
tatsuya6502

スコア2055

answer CHANGED
@@ -37,4 +37,18 @@
37
37
  }
38
38
  ```
39
39
 
40
- 試しに`MAX_LENGTH`を`100`のような小さな数字にして実行してみてください。もしそれで解決したら、スタックオーバーフローが起きているということになります。その場合は配列を使うのをやめて、ヒープにアロケートされる`Vec<u32>`を使ってください。
40
+ 試しに`MAX_LENGTH`を`100`のような小さな数字にして実行してみてください。もしそれで解決したら、スタックオーバーフローが起きているということになります。その場合は配列を使うのをやめて、ヒープにアロケートされる`Vec<u32>`を使ってください。
41
+
42
+ **訂正**
43
+
44
+ > `data1`と`data2`の2つの配列があったときは以下のようになりそうです。
45
+ >
46
+ > - 片方の配列の先頭バイトはスタック領域内にあり、途中からスタック領域外にはみ出している
47
+ > - もう一方の配列は先頭から最後までの全体がスタック領域外にある
48
+
49
+ Rustは配列を初期値で埋めますので、上のようになっていると、配列が1つしかないときでもメモリーアクセス違反のようなエラーが起きてしまいます。ということは、上は間違いで、下のようになっているのかもしれません。
50
+
51
+ - 片方の配列は先頭から最後までの全体がスタック領域内にある
52
+ - もう一方の配列の先頭バイトはスタック領域内にあり、途中からスタック領域外にはみ出している
53
+
54
+ そして、配列が2つあったときは、`TUSB0216AD_Ad_Data`を呼ぶところではなく、配列を初期化するところでメモリーアクセス違反のようなエラーが起きているのかもしれません。