Rust part10at TECHRust part10 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト716:ニみなすrustコンパイラの姿勢がif文である条件のときだけfreeするコードを書くのを認めないようにみえるという ワイの感想に繋がってるわけでして 717:デフォルトの名無しさん 21/05/21 17:53:39.45 IHGXJo1X.net use of moved valueやborrow of moved valueを use-after-freeとして理解してるのがそもそも間違ってる The Bookを読んでLifetimeとOwnershipを復習してくれ 718:デフォルトの名無しさん 21/05/21 18:00:55.07 J6y23PLS.net >>692のコードをcに書き直してみたらこうなる } Droppable; void drop(Droppable* d) { printf("> Dropping %d", d->id); free(d); } void sub(Droppable* d) { if (d->id == 0) { //free(d); printf("> Test %d", d->id); } } int main() { Droppable* _a; _a = malloc(sizeof(Droppable)); _a->id = 0; if (_a->id == 1) { drop(_a); } sub(_a); } 719:デフォルトの名無しさん 21/05/21 18:01:46.42 J6y23PLS.net これはrustでは弾かれるはずの「if文のある条件のときだけヒープのある部分をfree」というコードのはずだが 安全なCのプログラムや コンパイルは通るしランタイムエラーも起こさない。 メモリ安全なプログラムの中では、cで書けるプログラムのほうがrustで書けるプログラムより広いんだね rustはメモリ安全なcのプログラムと同等な処理を書けない部分もあって不便じゃないかっていうのが結局のところワイの疑問になるんや じゃあrustでは「if文のある条件のときだけヒープのある部分をfree」のコードをどう書くんや? メモリ安全性を損なってるわけでもない処理ではないはずなんやがrustのコンパイラははじくぞ? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch