回答編集履歴
1
Update
answer
CHANGED
@@ -12,7 +12,6 @@
|
|
12
12
|
g++ (Ubuntu 11.1.0-1ubuntu1~21.04) 11.1.0
|
13
13
|
$ g++ -fsanitize=address -Wall -Wextra -g convert_unit.cc -o convert_unit
|
14
14
|
$ printf '10\n1\n1\n' | ./convert_unit
|
15
|
-
|
16
15
|
値を入力してください:変換する単位系を選択してください [1]力 [2]圧力 [3]トルク:元の単位を選択してください [1]N [2]kgf:
|
17
16
|
=================================================================
|
18
17
|
==524401==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffcf4317df8 at pc 0x555de79884e0 bp 0x7ffcf4317cf0 sp 0x7ffcf4317ce0
|
@@ -32,11 +31,10 @@
|
|
32
31
|
(longjmp and C++ exceptions *are* supported)
|
33
32
|
|
34
33
|
SUMMARY: AddressSanitizer: stack-buffer-overflow convert_unit.cc:15 in power(double*)
|
35
|
-
:
|
36
34
|
```
|
37
35
|
|
38
36
|
15行目(`power()` 関数内)は以下になります。
|
39
|
-
```c
|
37
|
+
```c++
|
40
38
|
*(p+1) = (*ptr)*0.101972;
|
41
39
|
```
|
42
40
|
|
@@ -64,7 +62,7 @@
|
|
64
62
|
|
65
63
|
修正するとすれば、最大限必要な容量を確保しておく(`double value[8];`)ことかと思います(`power()`, `pressure()` 関数のシグネチャも変更しておくとよいかもしれません)。
|
66
64
|
|
67
|
-
```c
|
65
|
+
```c++
|
68
66
|
int main() {
|
69
67
|
double value[8];
|
70
68
|
int num;
|