[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/16 02:43 / Filesize : 202 KB / Number-of Response : 823
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part95



1 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 04:55:24.99 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part94
toro.2ch.net/test/read.cgi/tech/1329512856/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.78【環境依存OK】
toro.2ch.net/test/read.cgi/tech/1331894668/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

353 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 18:00:41.46 ]
コンセプトが導入されてない現状ではそのアルゴリズムの実装が使うイテレータの機能だけが使用可能ならば問題ない
だから現状ではイテレータの要件を完全には満たしてないクラスを渡しても動作するアルゴリズムの実装はありえる

354 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 18:05:54.57 ]
ただし、あるアルゴリズムがイテレータのどの機能(ってfunction=関数?)を使うかは実装依存。
一回動けばいいような書き捨てプログラムでもない限りきっちり作っておくが吉。

355 名前:351 mailto:sage [2012/05/26(土) 18:56:58.81 ]
ああスマン、自作イテレータをSTLのアルゴリズムに食わせる話か、
初心者なものでイテレータはSTLのコンテナから出てくるものが全てだと思い込んでいた、

356 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 20:27:12.61 ]
自前でちゃんとしたイテレータを書くのは
結構面倒くさいからboost使うといいよ

357 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:41:27.08 ]
>>348 読み替えてもやっぱり new_handler とメモリーリークの関連が見えてきませんね。

358 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:50:08.94 ]
変態イテレータあるよな
for_eachで回すだけで面白い事が出来る奴とか

359 名前:291 mailto:sage [2012/05/26(土) 21:52:12.10 ]
>>357=294 ?
俺は、>>275がnew_handlerでなんとか出来るらしいと
書いてたからnew_handlerでメモリーリーク対策できなくねと書いたまで。
new_handlerとメモリーリークが関係するかはしらんがな。

360 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:57:56.25 ]
そうか。すまんかった。

361 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:03:50.90 ]
>>357
Fooのコンストラクタ内で例外を捕捉しないものとして、
>347な状況でnew_handlerから(何でもいいが)bad_alloc等の例外をスローすると、Foo::m_pが指す先のメモリがリークする
>347の状況であってもnew_handler内で(あらかじめ非常用にリザーブしておいたメモリから割り当てる等の手段で)
例外をスローせずに処理した場合、リークは起きない

よって、new_handlerの中身がリーク発生に全く無関係とは言えない




362 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:09:06.28 ]
空きがもうない状況の話なのに
空きがあったらってぶっちゃけ関係ないよな

363 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:18:29.67 ]
>>362
>空きがあったらってぶっちゃけ関係ないよな
空き0前提はともかく、非常用のリザーブ領域まで0前提なのか否かはスレの流れからは自明ではありませんね〜
new_handler内でユーザー向けダイアログボックス用にリザーブ領域メモリを割り当て、
エラー表示した後プログラム終了、という設計も有り得る

364 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:22:05.70 ]
>>363
newが例外を出した時点で、new_handlerは失敗してる。

365 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:25:43.17 ]
>>363
newが例外だしてりゃリザーブ領域空ですよね

366 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:30:47.43 ]
>>364,>>365
kwsk
デフォルトのnew_handlerを自作new_handlerに差し替えた後でも
newが勝手に例外をスローするというのは初耳


367 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:36:04.77 ]
>>366
自作new_handlerが何も割り当てできなかったらNULLでも返す気か?
要点は例外じゃなくて、new_handlerがなすすべがない状態におちいてっるて
所なんだからそれぐらいは解れよ

368 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:41:05.88 ]
>>366
つまらん事で意地をはるな
得することなんて何もないんだから

369 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:48:40.40 ]
>>367
自作new_handlerなんだから、なすすべがない状態に陥らないように設計もできるよ?
単純な方法としては、プログラムの起動時に数KBかそこらのメモリを非常用にnewしておき、
そのポインタを大域変数g_pReservedに記録、
その後本当にメモリが0になったらg_pReservedからとりあえず返し、ただしプログラム終了フラグをセットして
速やかにプログラムを終わらせる、みたいな

そのためのnew_handlerです


370 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:53:03.92 ]
>>365 の話がでてるのに、リザーブがあればという。
もうダメだなこの人完全に意固地になってる

371 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:53:30.08 ]
>>369
g_pReserved が使われた後にもっかい new したら同じこと。



372 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:55:46.29 ]
>>361
元々可能性の低い失敗がもし起こったらどうなるか、って話をしてるのに
可能性をもう少しほんのちょっとだけ下げる方法の話をしても意味ないでしょ。

373 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:57:52.31 ]
>>369
話の論点からずれるけどアホだろあんた
最初にnewしてなければその分空きがあったはずで、意味がない。
new_handlerとして有効な使い方は、高速化の為にだけ先読みしてた
画像データなどのキャッシュ解放。不要なデータを削除すんのが普通。

#余談だから無視してくれ

374 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:09:46.56 ]
>>370
デフォルトのnew_handlerを自作new_handlerに差し替えた後ならnewが勝手に例外を投げることはないから、
>365の言うような現象は起きない。よって、>365に基づく批判はナンセンスだし

>>371
まあそこらの細かい設計は一考を要するが、
別にg_pReservedをただ一つのオブジェクトに一括で返さねばならないわけでもなし

>>372
可能性を下げる方法の話ではないよ。プログラムを正常終了させる話。
本当にヒープ0になってからでは何も仕事はできない、という主張をするなら、
後始末という仕事を正しく遂行するため用のメモリをあらかじめ確保しておくという発想に到らねばおかしい

>>373
無視するが、>372へのレスの通りである


375 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:17:56.17 ]
>>374
g_pReservedが空になったらどうする気だ?

376 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:21:13.73 ]
>>375
本当にそうなったら万事休すだが、
やる仕事は後始末、と限定し、それに必要十分なメモリ量を見積もって
g_pReservedとして確保しておけば、それは避けられる

377 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:23:24.66 ]
>>376
万事休すになった時のことをみんな言っているんだけど
それと、その時あんた例外なげないっていってたけどどうする気だ?

378 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:33:22.47 ]
>>376
newを呼ぶ側からすればどこから取ったかなんて知らんのですよ。
取れれば有効なポインタが返り、取れなければ例外、それだけ。
足りなくなったのでクリーンナップして終了させる必要があるなんて知る余地もない。
std::vector<T>あたりのメンバ関数/コンストラクタで足りなくなったとして、お前は一体何をすればいいと言うつもりだね?

379 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:36:22.15 ]
>>377
「万事休す」に2種類あることに注意だな。ただしどっちの解決策も示し済みwwwwww

(1) 後始末を遂行するためのメモリがリザーブ領域に残っているがそれ以外が0になった「万事休す」なら、
  リザーブ領域のメモリからの割り当てて後始末を遂行し、プログラムを正常終了すれば良い(>369, >374の3コ目)

(2) 後始末を遂行するためのメモリまで0になる「万事休す」は、
  >376のようにきちんと必要なメモリ量を見積もって確保しておけば生じない

ていうか、漏れとしてはnew_handlerの一活用方法を述べているだけで、そればかりに食いつかれてもなんだか悲しい
興味がおありの向きは、自力でnew_handlerを調べて活用方法でも考えたらどう?
例えば、new_handlerから自作GCを起動してしばらく使っていないオブジェクト(当然GCで管理する設計にする)
を解放し、空いたメモリを返すとか

380 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:40:36.58 ]
>>376
>>369のやり方をすれば、ヒープが枯渇するタイミングが早まるだけで、
使えるヒープの総量は変わらないんだけど

381 名前:デフォルトの名無しさん [2012/05/26(土) 23:54:34.16 ]
>>378
>newを呼ぶ側からすればどこから取ったかなんて知らんのですよ。
おk newがメモリをどこから取るかに依存するような話はしていないつもりだが

>std::vector<T>あたりのメンバ関数/コンストラクタで足りなくなったとして、お前は一体何をすればいいと言うつもりだね?
漏れはg_pReservedに残っているメモリでプログラムの後始末を遂行し、終了するという考え方を示した。
後始末と終了以上の仕事をさせたいというならどうするか考えるのはYOUの仕事ですな

>>380
使えるヒープの総量が変わらない、はその通り
>369のやり方は、後始末を遂行する余力を残した状態で、ちょっとだけ早期にヒープ枯渇を察知することに意味がある。



382 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:22:31.86 ]
>>381
おい、new_handlerが不足を察知したところでnewを呼ぶ側にはそれを知る術がない、といっているのだが。

383 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:27:33.02 ]
>>379
リザーブが枯渇した後なんだから(1) は文脈としてありえないだろ
見積もれないからnew_handlerが呼ばれてるわけで(2)も終ってる

384 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:36:22.89 ]
>>374
> 可能性を下げる方法の話ではないよ。プログラムを正常終了させる話。
どっちにしてもメモリーリークと関係なくね?

プログラムを正常終了させる話にしても、普通にスマートポインタつかってりゃ
例外が飛んで catch されるなり terminate() されるなりしてプログラムを終了
させたければさせられるわけだが、そのよくわからん new_handler を使う方法は
何がうれしいのかさっぱり。

385 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:26:48.55 ]
>>328-383
Effective C++ 改訂2版 p.49に>363に類似だがより良い方法の記述がある
>たとえばプログラム起動時に予備として大きなメモリブロックを割り当てておき、
>new-handlerが初めて呼び出されたときにそのブロックを開放するという方法がある。

記憶管理の話は荒れますねwwwwww


386 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:31:55.15 ]
>>385
荒れてる原因は話題じゃなくて、無理を通そうとする若干一名に見える。

387 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:34:23.79 ]
>>384
>385の引用の続きだが
>予備のメモリを解放するときには、ユーザーにメモリが少ないことを警告
>し、もっとメモリを追加しないと今後の要求が失敗する恐れがあることを
>知らせるメッセージを出す事が多い。
↑これはメッセージを出すケースだが、予備が十分なら、
メッセージを出すのがある程度高価な処理であるケース
(例えばダイアログボックススに長いメッセージを出す必要があり、文字列をnewしたい場合等)に対応できる。

また、ヒープメモリが予備含めて完全に0になった状態で
「(例外をcatch等して)プログラムを(正常に)終了させたければさせられる」
という>384の自信はどこから来るんだ;


388 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:36:00.96 ]
>>386
違うな。Effective C++の著者と漏れとで少なくとも2名だ

389 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:00:39.65 ]
>>388
お前か。

みんなが >>361 の「new_handlerの中身がリーク発生に全く無関係とは言えない」について
ツッコミを入れているのがわからないの?

390 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:19:59.91 ]
>>389
じゃあ藻前ら流の「全く無関係」のwell-definedな定義と「全く無関係」であることの論証よろ

少なくとも>388は、A,Bを命題として、「A→Bかつ¬A→¬BだからAとBは無関係とはいえない」、
という論法(のちょい派生)なわけだが

391 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:21:59.07 ]
しつれい
× >388
○ >361



392 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:27:48.24 ]
>>390 命題A,Bってそれぞれ何のこと?

393 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 16:04:43.89 ]
\           /     /. : : : : : : : :ヽ-‐.: :_;. --- .._: : : : : : : :\       \      /
_  争  も  _   /, -‐==ミ: : : : _,ィニ-‐……ー-: 、`ヽ、: : : : ヽ、      _   争   _
_  え  っ  _     . .:´: : : : : : : ≠:7: : : : : : : : : : : : :ヽ、 ヽ| : i : : :,     _    え   _
_   : . と   _   /.: : : : -‐: :7´: : /:,ハ : : : :ヽ : : : ゝ-- :\ | : :! : : : ,   _    :   _
_  :      _ /, -‐/.: : : : :i : : /ィ:爪: : :\ :\ : : :\: : :`ト : !: : : :′   _   :    _
             〃  /. : : : : : : |.:イ :ハ:| \: .、\: : xィ¬ト、: :| : : ! : : : : :,
/          \   /.: :/.: : : : /l : |/Гト、       / |_,ノ0:::ヽ : : :i : : : : :′ /        \
 /  |  |  \    | .:/.:/. : : :i: i : | |ノ0:::ト :::::::::::::   |: :∩::::::ト: : : !: : : : : : :,  / | | \
             ∨i: |: : : : |: :ヽ| |::∩::| ::::::::::::::::  !.::∪::::::| |: : :i : : : : : : ′            ,ィ /〉
               |: |: : i : :', : |  |::∪::| ::::::::::::::::  !: : : : : :||: : i : : : : : : : :,          / レ厶イ
                ヽハ: : :、: :ヽ|  l : : : |:::::  ,  ::::└――┘ ! : : i : : : : : : : ′        /   ⊂ニ、
                い、: :\/   ̄ ̄                 ', : : i : : : : : : : : ,     _, -‐'    ⊂ニ,´
    r 、  _          ヽ: :〈        <  ̄ フ         |: : : ! : : : : : : : :′,.-‐T   _,. -‐'´ ̄
    くヾ; U|           | : \                   /| : : :i : : : : :_, -‐'    |  /
   r―'   ヽ、             | : : : \               イ: : :| : : :i_,. -‐       |/
    `つ _   ̄ ̄Τ`ー―-- L: : : : : `: : . . .  __    .:〔: : :|: : :r┬'              |


394 名前:デフォルトの名無しさん [2012/05/27(日) 19:45:53.79 ]
このスレはC++/CLIもやってるの?

395 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 19:49:06.86 ]
共通の話題なら扱うだろうけどCLI固有の話となるとご遠慮願いたい。

396 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 20:20:49.72 ]
CLIはこっちか
初心者用しかないのが気にはなるが

くだすれC++/CLI(初心者用)part2
toro.2ch.net/test/read.cgi/tech/1268613679/

397 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:00:36.93 ]
初心者といっても、C++/CLI初心者にはC++と.NETの両方とも中級以上が必須だぜ
向こうはC++/CLIに固有の内容以外(C++や.NETの基礎知識)は基本的にスレチだし

398 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:42:40.23 ]
int main()
{
 int *array = new int[0];
 delete[] array;
 return 0;
}
Visual Studio 2008搭載のコンパイラーでこのコード走らせると
異常終了してた気がするけど、もし異常終了したらバグじゃね?
仕様として正常終了と異常終了どっちが正しいんだ?

399 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:58:07.72 ]
>>398
new が失敗→ bad_alloc → terminate() → abort() という可能性はあるが、
現実に VS が対象としてる Windows 環境でそうなることは考えづらいな。

400 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:00:21.06 ]
>>390
メモリー不足→new_handler作動→リザーブが足りない→newが例外→直前にnewで確保したメモリーがリーク

もしくは、
メモリー不足→new_handler作動→リザーブが足りない→newが例外を出さない→newが0を返す?→異常終了

メモリーリークとnewが例外出す以前は全く関係ない

401 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:01:47.57 ]
>>399
俺Windows持ってないから、実際やったらどうなるか試してもらえるか?
正常終了したら正常終了したと教えてくれ。



402 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:10:53.15 ]
new int[0] は合法。変える値もnull値とは限らない(配列の格納に必要な追加のメモリを要求することは実装上許されているので)。
…規格票はJISのページがアレなので、誰か英語の規格でも貼っておくれ^^

403 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:12:54.12 ]
bad_allocが投げられるようなシチュエーションではもはや何をやっても大抵ダメ
って書いてある本があったな

Exceptional C++だったかな?

404 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:14:48.61 ]
>>402
new int[0]が何を返そうがどうでも良いんだけどね。
どうせ0なんだから代入しないわけだし。
問題はdelete[]がnew int[0]で確保した何かを
削除して落ちるのが合法かというわけで。

405 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:17:32.68 ]
>>404
勿論合法。>>398もエラー無しの正常終了。VCでもエラーでなかったよ。

406 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:20:18.83 ]
>>403
大抵はダメでも対処するケースはそれなりにある
可能な限りキャッシュを開放してロックを解除とかね
プロセス外部にあるロックは鼓動が止まってから
しばらく立たないと解除されないから、開放できるものがあるなら
最後の余力を使って可能な限り解放したほうがいい

407 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:21:29.08 ]
>>405
de;ete[] new int[0];で異常終了が合法なの?
りょうかーい。

408 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:25:00.40 ]
大抵は盛大にリークしまくりモードで焼け牛に水状態なんだけどな。
実装によっては開放した途端OSにボッシュートされてヨソにもってかれたりとかも。

409 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:29:37.55 ]
Windows Me以前か、Windows以外のOSか?
基本的に
ヒープが空 = アドレス空間に空きがない
であって
ヒープが空 = システムの記憶領域が足りない
じゃないからな。後者だとプログラム以前にOSが止まる。

410 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:30:27.97 ]
>>407
ちゃうねん。異常終了しないのが合法。

411 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:31:42.59 ]
焼け牛…そういえば、牛に衝突すると「モー」となくドライビングゲームがあってだな…



412 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:58:10.60 ]
若干スレチですが、
cmathのrand()って周期いくつか分かりますか?

413 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:00:29.78 ]
若干スレチですが、
cmathのrand()って周期いくつか分かりますか?

414 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:03:46.58 ]
2分弱かな・・・。

415 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:15:26.42 ]
>>413
そんなもの存在しない

416 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:26:07.12 ]
C++11ならMT19937が装備されたじゃん

417 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:05:41.96 ]
>>413
cmathの中にrandはない。他の場所にあるrandの周期は実装によって異なる。

418 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:15:04.79 ]
randの仕様見たけど、ほとんど仕様ないんだな

419 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:24:54.98 ]
線形合同法だったり、なんかビット操作して128bit周期にしてみたりとか色々実装があるね。

420 名前: ◆QZaw55cn4c mailto:sage [2012/05/28(月) 03:46:04.96 ]
最近のはやりは、それでも基本線形合同、ただし表に返すのは上から半分

421 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 05:52:39.32 ]
それは仕様がない



422 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 10:47:20.39 ]
土日に盛り上がってたんだな・・・

>>361
RAII(スマポ)使うかtry-catch(-rethrow)するか2択なんだし
両方しないのは単なる例外安全でないバグコードじゃね

Fooがバグってるのに
Foo「俺のせいじゃないです、bad_alloc投げたやつせいです」
それあんまりじゃね

423 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 12:00:15.12 ]
>>403
どうしようも無いケースも多いだろうけど
オンメモリで小さいテキストを処理する機能にクソでかいファイル渡すとか
オプションで何かのバッファサイズに無茶な値を設定したとかあるし

対話型なら別にプロセス落とさなくても
入力ハンドラあたりでcatchしてエラー表示して続行でよくね

424 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 12:34:04.34 ]
まったくだ。数ある「例外処理したくない」言い訳のひとつだろ。

425 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 14:26:54.15 ]
>>423
画面表示もメモリ食うんじゃないのか?

426 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 18:21:20.59 ]
>>425
>>423の2,3行目のケースならメモリ大量消費処理から
入力(\nやマウスイベント)ハンドラまでスタックが戻った時点で
メモリは解放されてる(例外安全なコードなら)

戻って尚足りないなら、どうしようも無いケースってことで

427 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 09:45:22.55 ]
リソースが厳しい組み込み系以外で、
コンパイラオプションで例外を無効にしてる人っている?

428 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 13:24:28.38 ]
>>427
Google社員がそうじゃね?

429 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 21:19:59.03 ]
PSP、DS、360、Wii全部例外切ってやってた

430 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 21:59:51.13 ]
>>429
コンパイラー何使った?

431 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 22:52:35.80 ]
CODE WARRIOR



432 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 01:10:25.39 ]
>>429
427 じゃないけど、なんで切ったのか気になるなー。
プログラムサイズ?実行速度?

433 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 04:20:14.38 ]
>>431
それはコンパイラーじゃなくて統合開発環境じゃん。てのは置いといて、
CodeWarriorについて来るコンパイラーは、そもそもthrow-try-catchが
まともに動かんだろ。

434 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 07:38:21.36 ]
例外切るとstd::stringやstd::vectorとかも実質使えないから
ベターCとしてのC++になるのかな

435 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:05:44.79 ]
STLも使えなくなるな
いやまて例外を投げるメンバ関数だけ切ればいい話か

436 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:28:18.20 ]
クラスのポインタって実体はあるの?

class sub{
public:
int aaaa;
};

claaa sper{
public:
sub* s;
};

↑特にこういう時

437 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:37:44.75 ]
メンバへのポインタあるだろ

(sub::**s)になるのかな

438 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:38:14.93 ]
あ、ただしこれは単独では使えないからね
インスタンスと組み合わせて使わないと意味をなさない
オフセットのようなものか

439 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:46:53.93 ]
sperをインスタンス化してもsubは不定かNULLポインタだな。

440 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:50:28.22 ]
それはコンストラクタの初期化リストか他のメンバ関数でnewするしかないね
他の配列やPODなんかを指しても別にいいけど
ただクラスはstaticメンバでない限り多数生成する目的なんだからやはりnewだろうね
そしてデストラクタにはdeleteを入れる

スマポを使うと楽だけどな

441 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:52:29.69 ]
オブジェクトを作って配下の変数やクラスにもデータを入れているのに
初期化関数を抜けたらポインタで持たせているデータだけNULLになっていました。
char*とかがそうです。中身を持たせているのにも関らず消えてしまうのはなぜなんでしょうか?



442 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:00:09.20 ]
具体的に書いてみろや
文章だけじゃイメージ沸かない

443 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:17:17.40 ]
>>436
こんな感じかなあ
class sub {
public:
int aaaa;
};

class sper {
public:
sub* s;
};

int main()
{
sub* su = new sub;
sper* sp = new sper;

sp->s = su;
int sub::*aa = &sub::aaaa;
su->*aa = 1;
std::cout << su->*aa << std::endl;
sp->s->aaaa = 2;
std::cout << su->*aa << std::endl;

delete sp;
delete su;
}

444 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:42:39.53 ]
クラスの配列をコンストラクタで初期化することってできますか?
class test{
public:
cObj* objArray[10];
test() : objArray[0](new cObj) {};
};

みたいな感じなんですが・・・・・

445 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:50:21.49 ]
>クラスの配列をコンストラクタで初期化することってできますか?
できる。

446 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:56:04.82 ]
>>445
どうやって?

447 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:58:31.43 ]
やればできる
できないと思った瞬間にゲーム終了だ

448 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:58:34.74 ]
>>445
それできるのか? 知らんかった

449 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 10:05:05.19 ]
newしたオブジェクトをdeleteする際に下のエラーが出て困っています。 どうしたらいいか教えてください。

HEAP[hoge.exe]: Invalid Address specified to RtlFreeHeap( 00000000, 00000000 )
Windows によって hoge.exe でブレークポイントが発生しました。

ヒープが壊れていることが原因として考えられます。hoge.exe または読み込まれた DLL にバグがあります。

可能であれば、出力ウィンドウに詳細な診断情報が表示されます。

450 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 10:19:59.96 ]
ソースを示せ

nullをdeleteしてるんだろ

451 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 10:23:54.40 ]
>>444
デフォルトコンストラクタでいいならvectorにでも突っ込めばいいけどな



452 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 10:41:58.15 ]
>>449
地道にデバッグするしかない
書いちゃダメなところに書いてる
多くの場合、配列の添字かポインタが意図しない値になってる

453 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 10:51:41.49 ]
>>450
無理!
超雑だし、吐き気を催すだろうからww

>>452
なるほど・・、取りあえずやってみます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<202KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef