Enviar pesquisa
Carregar
コードに潜むC++の未定義動作達
•
Transferir como PPTX, PDF
•
0 gostou
•
2,336 visualizações
A
Azaika At
Seguir
CombNaf 3 - Final で発表したスライドです。 触りだけです。
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 18
Baixar agora
Recomendados
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
目grep入門 +解説
目grep入門 +解説
murachue
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Ques12「AIのテスト~誤検知と検出漏れ~」
Ques12「AIのテスト~誤検知と検出漏れ~」
hirokazuoishi
Recomendados
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
目grep入門 +解説
目grep入門 +解説
murachue
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Ques12「AIのテスト~誤検知と検出漏れ~」
Ques12「AIのテスト~誤検知と検出漏れ~」
hirokazuoishi
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
トランザクション入門
トランザクション入門
Kumazaki Hiroki
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
直交領域探索
直交領域探索
okuraofvegetable
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
Tier_IV
トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
Daizen Ikehara
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
TLA+についての話
TLA+についての話
takahashi takahashi
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
Ken Ogura
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
Yamaura Kiyoto
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
絶対に描いてはいけないグラフ入りスライド24枚
絶対に描いてはいけないグラフ入りスライド24枚
itoyan110
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
AtCoder Inc.
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
G2o
G2o
Fujimoto Keisuke
dwangocpp1-lt
dwangocpp1-lt
karupanerura
モテる JavaScript
モテる JavaScript
Osamu Monoe
Mais conteúdo relacionado
Mais procurados
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
トランザクション入門
トランザクション入門
Kumazaki Hiroki
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
直交領域探索
直交領域探索
okuraofvegetable
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
Tier_IV
トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
Daizen Ikehara
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
TLA+についての話
TLA+についての話
takahashi takahashi
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
Ken Ogura
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
Yamaura Kiyoto
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
絶対に描いてはいけないグラフ入りスライド24枚
絶対に描いてはいけないグラフ入りスライド24枚
itoyan110
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
AtCoder Inc.
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
G2o
G2o
Fujimoto Keisuke
Mais procurados
(20)
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
C++でできる!OS自作入門
C++でできる!OS自作入門
トランザクション入門
トランザクション入門
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
直交領域探索
直交領域探索
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
トランザクションの並行処理制御
トランザクションの並行処理制御
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
クラウドサービス、AWS/Azure/GCP それぞれの Text to Speechを比べてみた
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
TLA+についての話
TLA+についての話
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
Union find(素集合データ構造)
Union find(素集合データ構造)
Glibc malloc internal
Glibc malloc internal
絶対に描いてはいけないグラフ入りスライド24枚
絶対に描いてはいけないグラフ入りスライド24枚
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
G2o
G2o
Semelhante a コードに潜むC++の未定義動作達
dwangocpp1-lt
dwangocpp1-lt
karupanerura
モテる JavaScript
モテる JavaScript
Osamu Monoe
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
Shingo Inoue
Gradle PluginとCIと俺
Gradle PluginとCIと俺
Shinobu Okano
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews, Inc.
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
TomomitsuKusaba
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
Satoshi Yoshikawa
Java script関数コールの追跡
Java script関数コールの追跡
Keiichi Kobayashi
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
MITSUNARI Shigeo
第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpython
civic Sasaki
今さら始めるJavaScript
今さら始めるJavaScript
Ashitaba YOSHIOKA
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
Semelhante a コードに潜むC++の未定義動作達
(15)
dwangocpp1-lt
dwangocpp1-lt
モテる JavaScript
モテる JavaScript
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
Gradle PluginとCIと俺
Gradle PluginとCIと俺
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
Java script関数コールの追跡
Java script関数コールの追跡
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpython
今さら始めるJavaScript
今さら始めるJavaScript
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Último
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Último
(9)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
コードに潜むC++の未定義動作達
1.
コードに潜む C++の未定義動作達 Azaika
2.
自己紹介 ▪ Az(@azaika_)です ▪ 普段は競プロをしたりC++をしたりしています ▪
Siv3Dというゲーム開発ライブラリの話もしています ▪ 「『Rustやりたい』と言いながらやらない会」名誉会員
3.
C++の特徴 ▪ C言語を発展させて別物にした言語 ▪ C言語と後方互換性がある ▪
メタクソに速い ▪ 言語仕様が膨大 ▪ 未定義動作、未規定動作、実装依存動作が多い ▪ 今回はこれらを紹介
4.
用語の意味 ▪ 未定義動作 ▪ 規格で「実行したらどういう結果になっても良い」とされている操作 ▪
コードとして通常違法 ▪ 未規定動作 ▪ 「処理系が適当に動作を定めても良い」 (一貫する必要なし) ▪ コードとしては違法でない(ココ怪しい) ▪ 処理系定義動作 ▪ 「処理系が動作を決めてもよいが、一貫している必要がある」
5.
未定義動作が起こると ▪ 未定義動作が起こる場合、コンパイラはどんなコードを生成しても良い これを利用した最適化がかけられる場合がある •
もし未定義動作を起こすコードを書くと… 1. コードが意図しない動作に書き換えられたり 2. 突然変な場所でセグフォったり 3. 挙句の果てにタイムスリップしたりする ▪ 詳しくは割愛
6.
気をつけたいシリーズ
7.
配列外参照 ▪ よく周知された未定義動作 ▪ もちろん初手で
arr[4] を参照して死ぬ ▪ 初心者から慣れてる人までやらかしがち
8.
配列外参照 おまけ ▪ 本当はC++11時点でこう書けるようになるはずだった ▪
結局色々ゴタゴタがあって採択されず、C++17でも取り入れられていない
9.
ぬるぽ ▪ 以下のコードはもちろん違法(未定義動作) ▪ ヌルポインタの中身を参照するのはNG ▪
簡単な例なら皆意識できる
10.
ぬるぽ ▪ ところが下の例の事はよくやりがち ▪ f(nullptr)
で死ぬ ▪ きちんと場合分けを入れて対策しよう
11.
ぬるぽ おまけ ▪ どうすればこのようなミスを防げるか
参照を使おう! • ポインタ的操作が要らず無効値を表現する必要がないならこれで良い • C++17 では無効値を表現できる std::optional というのが出来た
12.
オーバーフロー ▪ ときと場合によっては次のようなコードにも注意がいる ▪ f()
の戻り値がほぼ INT_MAX (通常231 − 1付近)の場合オーバーフローする ▪ 実は符号付き整数のオーバーフローは未定義動作となる ▪ 符号なし整数は最大値 + 1で割った余りになるのが保証されている
13.
参照の寿命切れ ▪ 下のようなコードを書いたとする ▪ このコードは未定義動作を引き起こす可能性がある
14.
参照の寿命切れ ▪ std::vector は通常配列のサイズより少し多めのメモリを確保している ▪
ところが要素を追加して、配列のサイズが確保しているサイズを超えると…? 更に大きな連続するメモリサイズを確保して、配列の中身を丸ごと移動する 俗に言う再配置 この時、配列の要素を指すポインタ/参照は全て無効になる
15.
参照の寿命切れ ▪ 更に range-based
for を展開すると大体こんな感じになっている ▪ it の型は std::vector<int>::iterator ▪ iterator はポインタみたいなものであり再配置で無効化される ▪ 無効化された iterator の中身を参照しているのでもちろん未定義動作
16.
参照の寿命切れ ▪ この例は vector::reserve()
関数を適切に使用することで回避できる ▪ こういった一見わからない参照死は多い ▪ 未定義動作の中でも有数の再現性のないバグを引き起こすので注意しよう
17.
終わりに ▪ 今回紹介したのは色々あるうちの一部 ▪ 詳しい例とか聞きたい人は後で来ていただけると嬉しい ▪
C++は泥臭い部分もあるけど、言われてるほど悪い言語ではない ▪ 皆も気をつけながら楽しいC++! ▪ もしくはRustやって僕に教えて
18.
ご清聴ありがとうございました
Baixar agora