- 1 名前:デフォルトの名無しさん [2009/09/17(木) 22:22:59 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.67【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1247937958/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 281 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 00:34:29 ]
- >>280
補数の意味が分かってないじゃん
- 282 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 03:12:32 ]
- まったくだ。
2の補数と単に言った場合、それが2種類あることも分かっていないんだろう
- 283 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 08:17:37 ]
- 3進数における2の補数のことは考えなくてもいいと思うけどな。
- 284 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:46:35 ]
- >>280
自己解決しました。 1の補数 各桁ごとに1の補数をとる 2の補数 2^nの補数をとる 1と2の意味が全く異なる上、 2じゃなくて2^nのことだし。 酷い用語が万延したものだ。
- 285 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:51:39 ]
- 文字列についてなんですが
文字列の最後の文字を削除する場合ってどうすればいいんですか? それっぽい関数が見当たらなかったんですが、皆さんどうやって処理するんでしょうか
- 286 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:56:04 ]
- void cut(char *str){
str[strlen(str)-1] = '\0'; }
- 287 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:56:48 ]
- あら、縮まってなかった。
- 288 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:58:49 ]
- >>286
ありがとうございます。 文字列の方は、最初から[10]と決めているんですが、この場合動的に管理しないと無理ですか?
- 289 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 11:50:42 ]
- >>288
ポインタそのものは変化しないので静的配列でもOK
- 290 名前:271 mailto:sage [2009/10/03(土) 12:18:05 ]
- 自己解決しました・・・(´・ω・`)
- 291 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 12:52:09 ]
- 自家発電しました(´・ω・`)
- 292 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 13:11:49 ]
- 自殺しました(´・ω・`)
- 293 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:29:41 ]
- 自乗しました
- 294 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:10:29 ]
- 自損しました(´・ω・`)
- 295 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 16:31:37 ]
- struct hoge {
inline int operator [] (int i) { return a[i]; } int a[10]; } ↑のinlineって生の配列アクセスまで最適化されますか?
- 296 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:02:32 ]
- コンパイラ次第だが期待していい。
- 297 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:28:55 ]
- 環境VC++ 2008 Expressです。
配列 *points1 = メモリ確保した。 *points2 = メモリ確保した。 for ( i = 0; i < numPairPoints ; i ++) { points1 から始まる配列にxとyを代入する。 points2 から始まる配列にxとyを代入する。 } コード自体はとても簡単な処理なのですが、 デバッグしていると、i がある程度(デバック実行の度常に同じiの値)増えた後に、 何故かpoints2(のみ)の内容が書き換えられ、メモリアクセスエラーが起こしています。 こういうことが起こる場合にはどこでなんとかすべきなんでしょう? points1の処理は通ってpoints2が途中でだめなのでコード外の要因だと思うのですが・・・ よろしくお願いします。
- 298 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:34:10 ]
- >>297
points1 の型は何?
- 299 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:37:46 ]
- opencvなので簡略化しました。
書いてるコードはこんなんです。 CvMat* points1; CvMat* points2; points1 = cvCreateMat(1, numPairPoints, CV_32FC2); points2 = cvCreateMat(1, numPairPoints, CV_32FC2); for ( i = 0; i < numPairPoints ; i ++) { CvSURFPoint* r1 = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, ptpairs[i*2] ); CvSURFPoint* r2 = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, ptpairs[i*2+1] ); //略 points1->data.db[i*2] = r1x; points1->data.db[i*2+1] = r1y; points2->data.db[i*2+1] = r2y; points2->data.db[i*2] = r2x; }
- 300 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 18:03:49 ]
- >>284
おー昔のコンピュータの数値は整数ではなく [0..1) の固定小数点数を表していた と言えば後は分かるだろ
- 301 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:26:00 ]
- >>300
[0, 1) のことだったら 2の補数は1の補数と呼ばれなくてはおかしい。 [0, 2) の固定小数点数だとしても、 1の補数の方は各桁の1の補数であることは変わらない。 いずれにしろおかしい。
- 302 名前:デフォルトの名無しさん [2009/10/03(土) 20:15:38 ]
- C言語勉強し始めたド素人ですが質問です
エディタにVisual c++2008使ってるんですが ファイルを作成する場合、まずはプロジェクトの作成→ソースファイルの作成らしいですが 1つのプロジェクトフォルダに別々のソースファイルを保存することはできないんですか?
- 303 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:21:36 ]
- >>299
opencvと言うのは知らんが、 単純に確保している領域をオーバーしてるんじゃないの?
- 304 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:30:35 ]
- >>302
メニューのプロジェクトから、新規項目の追加とか既存項目の追加とか。
- 305 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:37:47 ]
- >>304
新規項目で別のソースファイルを作れるんですが ただ、コンパイルするときビルドエラーとかになるんですよね
- 306 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:43:21 ]
- >>302 >別々のソースファイルを
main()を2つ書いてるとか? もしそうだったら、プロジェクトの追加をするんだ。
- 307 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:44:49 ]
- >>305
エラーを貼ってみて。
- 308 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:55:40 ]
- プロジェクト上から見えてるmain文が一つだったらいくつソースファイルがあってもおk
- 309 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:35:36 ]
- >>299
何の関数か知らんけど、cvCreateMatの第1引数と第2引数を入れ替えてみそ
- 310 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:17:49 ]
- >>299
OpenCV の使い方に関する話になりそうなんで 【Intel】OpenCV総合スレ【画像処理】2 pc12.2ch.net/test/read.cgi/tech/1230511656/ こっちで聞いてみたら? ぱっとみ cvCreateMat の 第3引数はそれでよいっぽい 第1引数 第2引数 の関係と その後の操作の次元があっているのかわからん (NxM なのか MxN なのか
- 311 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:42:45 ]
- 構造体というものは、配列の範疇に入るんでしょうか?
メモリだけ見れば似たような感じなのですが
- 312 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:45:10 ]
- "構造体"の"配列"もあるからどうかな...
- 313 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:48:54 ]
- 普通は範疇には入れないよな。
文脈によるけど。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:50:42 ]
- どうせ全部ビット列だと割り切れば同じ扱いをしても違和感ないか。
面白い視点だな。
- 315 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:50:53 ]
- 構造体はメンバ間でパディングかかるけど
配列は隙間無で詰めないか?
- 316 名前:311 mailto:sage [2009/10/03(土) 22:55:02 ]
- どこで見たのかは忘れたのですが、構造体を配列と書いてるところがあったので気になって質問させていただきました
もしかしたらサイト管理者の間違いかもしれないので、あまり気にしない様にします。ありがとうございました。
- 317 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:57:44 ]
- パディングパディング言うけどさ
その空いた領域にほかのデータが書き込まれる可能性ってあるの?
- 318 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:00:33 ]
- ない
- 319 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:23:04 ]
- ないあるよ
- 320 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:44:19 ]
- パディングって何だと思ってるの? >317
気にしなければならないのは1構造体のサイズ=メンバの合計のサイズにしたければパディング無しにしなければならないって話なんだよ
- 321 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:44:37 ]
- 「ほかのデータ」の意味がわからんない
- 322 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:05:02 ]
- うろ覚えだけど構造体は4byteの倍数に合わせるようにうめてるとか聞いたような聞いてないような
- 323 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:15:43 ]
- アラインメントね
あと4バイトとは限らない
- 324 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:21:25 ]
- 別のスレで質問したんですが人いなさそうなのでこっちで質問させてください。
visual studio 2008で それぞれ別のディレクトリに保存した同一ファイル名のファイルを プロジェクトに追加してビルドすると 未解決の外部シンボルというエラーがでます。 どうしたら同一ファイル名のファイルをビルドできますか?
- 325 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:24:18 ]
- ファイル名を変える
- 326 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:26:08 ]
- >>325
買った参考書に入っていたプロジェクトでは 同じファイル名でビルドできたので 出来ればその設定方法を知りたいんですが
- 327 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:28:53 ]
- プロジェクトをわけ、1ソリューションにまとめてみては?
- 328 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:29:16 ]
- >>326
こっちいくといいよ Visual Studio 2008 Part 18 pc12.2ch.net/test/read.cgi/tech/1251622158/
- 329 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:32:49 ]
- 他の原因でもそのエラーは出るからよくわからんけど
ファイル名が同じだからコンパイル後の出力ファイルが上書きされたって事? だったらファイルのプロパティで->出力ファイル->オブジェクトファイル名を設定すればどうにかなりそうだけど
- 330 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:33:53 ]
- そもそもクラス名がかぶってるんじゃねの?
- 331 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:36:45 ]
- >>324
そのファイルへのパスちゃんと通ってるかィ?
- 332 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:38:33 ]
- >>329
ファイル名を指定したら出来ましたありがとうございます。 >>330 クラス名は被ってますがnamespaceで区別してます >>331 通ってます
- 333 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 06:25:57 ]
- VC2008でoggライブラリ使ってて遭遇したんですが、
CのライブラリをC++で使ってるときに if(true返す処理) { throw } Cライブラリの関数呼び出し というような状態で、例外が投げられませんでした。 C関数とthrowをそれぞれ別な関数に分割したら 思ったとおりに動いたのですが、もしかしてC関数と 例外って一緒に使っちゃダメなんでしょうか?
- 334 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:57:20 ]
- 例外が投げられないってどういう状態?
C言語部分を通過するthrowは駄目だった気がする。 例えばC言語の関数に渡したコールバックで例外投げた場合とか。 void c_func(void (*callback)()) { callback(); } void cpp_callback() { throw ○; } void cpp_func() { c_func(cpp_callback); }
- 335 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:15:01 ]
- >>333
ライブラリ呼び出しで、そのような制限は聴いたこと無いな。sinとか普通に使ってるし。 その問題が起きる最小のコードを提示したほうが回答が得られやすいよ
- 336 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:26:21 ]
- >>334
もうちょっと具体的に書くと、 if(!dir.CheckPath(fileName_)) { //ファイルパスが有効ならtrueを返す関数 throw "無効なパス"; } //oggライブライリのファイル開く関数 if( ov_fopen(const_cast<char*>(fileName_), Dst_) ) return false; return true; ファルパスが無効なら例外投げるはずですが、投げられずに ov_fopenに行ってしまい、関数内でアクセス違反起こしてエラーになります。 パスチェックとov_fopenを別々な関数に分けて書くと、思ったとおりの動作をする ので、処理自体には問題は無いと思います。
- 337 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:37:35 ]
- >>336
ov_fopenをelse側に書くとどうなるの?
- 338 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:59:02 ]
- 例外仕様を避けるほうがいいのは何で?
・例外仕様を使わないとクライアントがメソッドの投げうる例外を調べるときにドキュメントを読むかソースを追跡するぐらいしかできない ・例外仕様で縛らないと実装の変更の際に投げる例外が増減する可能性もあるのでクライアントが実装まで気にしなければならない と考えると例外使用を使わないのはよくないような気がするんですが・・・ templateと相性が悪いのは分かりますが、非テンプレート限定なら問題ないはずです
- 339 名前:336 mailto:sage [2009/10/04(日) 11:18:50 ]
- >>337
試す前にリコンパイルしてたら症状が出なくなりました。 すっきりしないですが・・・
- 340 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:44:44 ]
- >>338
少なくとも、例外仕様を批判する立場からすると後者は逆。 実装の変更の際に投げる例外が増減する →例外仕様も変更する→それを呼び出す元も修正しないといけない or →例外仕様を変更しない→例外仕様が実態と乖離したものになる あと、C++の例外仕様は実行時にコストが増えるだけでコンパイル時には何もしてくれないのもマイナス。 (さらに、実行時違反していることが分かっても、基本は即座に落とされるだけで何もできない)
- 341 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:05:52 ]
- 例外仕様は後付けの仕様なので、いろいろと仕方ない。と言うより、元々必要ない気も。
- 342 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:10:30 ]
- 強制終了の為だけに例外を使う分には問題ない?
- 343 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:23:39 ]
- Java以外にチェック例外を採用した言語はない気がする。
- 344 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:34:42 ]
- C++の例外仕様って、コンパイル時じゃなくて、実行時にエラーになるんだろ?
あんまりうれしくないよな。
- 345 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:45:38 ]
- >>338 例外仕様は手間をかけてもメリットがなかった。
ただ、throw()はメリットがあると思う。
- 346 名前:デフォルトの名無しさん mailto:age [2009/10/04(日) 15:00:35 ]
- επιστημηです。
--- "[cppll:1531] Re: property (言語拡張について)" / Shin'ya MORINO / 2002/02/21 14:12:27 +0900 --- >> DDJ 1997.02/03 オブジェクト指向的日常 # '日常本'のオマケにPDFアリ >今、手元に無いんですが、もしかして、やってました? やってましたー # 長年C++と付き合ってると、大抵のことはやってるなーって我ながら感心します。 # 僕ってすごい? ^^; (どっかのWeb-pageで'神のような人'と書かれていた...) -----:-----:-----:-----:-----:-----:-----:-----:-----:----- FUKUDA (episteme) Fumiki -- magical, but never a magic...
- 347 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:12:21 ]
- 何です、これ?
- 348 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:41:00 ]
- C++BuilderとVisualC++は
プロパティ使えるんだよな
- 349 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:24:00 ]
- テンプレート関数の引数にポインタを渡して、
テンプレート関数の内部ではポインタの内容が書き換わっているのですが、 関数から戻ってくるとポインタの内容が元に戻ってしまいます。 何故でしょうか?
- 350 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:39:31 ]
- >>348
C++の仕様には含まれてなくて、各処理系の言語拡張だよね? だから使わないほうがいいのかな?
- 351 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:49:34 ]
- >>349
テンプレ関数の宣言と、呼び出してる部分と、引数に渡している値の宣言部分と、 テンプレ関数内のその引数を操作している部分を書いてください。
- 352 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:49:37 ]
- >349
一番可能性が高いのはおまいの勘違い。 最小限のコードでも載せないとまともな回答は望めないかと。
- 353 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:50:54 ]
- >>349
ポインタを参照で渡せば?
- 354 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:30:06 ]
- >>352の言うとおりだろう。
どこかでコピコンが働いてんだよ。
- 355 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:35:46 ]
- コピコン可愛いお
- 356 名前:349 mailto:sage [2009/10/04(日) 19:50:39 ]
- >>353の仰るとおり、ポインタを参照で渡したらポインタの内容が
保持されました。 コード部分なんですが、リスト構造のポインタだったので、 操作している部分が長く、見にくいかもしれませんが 書いたほうがよろしいでしょうか? 皆さんレスありがとうございます。
- 357 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:20:28 ]
- 教えてください
VS2008で作ったCのプログラム(ただのハローワールド)を 別のマシンで実行させるにはどういうモジュールが必要なんでしょうか .exeファイルをもっていって実行させてもエラーで動作しませんでした
- 358 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:27:52 ]
- >>357
wine
- 359 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:29:20 ]
- >>357
CRTをStaticにLinkするんだ
- 360 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:34:15 ]
- >>357
.NET Frameworkがいるんじゃね?
- 361 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:14:07 ]
- 別のマシンが何なのかも書いてないのに、お前ら適当なw
- 362 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:14:58 ]
- >>349はこのレベルの解説から読んだ方がいい気がする
ttp://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/C++2/06/06-02.html
- 363 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:18:55 ]
- >>362
だったらまずお前が読めよ
- 364 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:20:37 ]
- お前は何を言ってるんだ
- 365 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:21:29 ]
- 自分でも何を言ってるのかわからん
- 366 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:32:50 ]
- >>358-361
すいません。別のマシンってwindowsXPのデフォルトインストール状態のマシンです なんかライブラリがいるって聞いて、何かをインストールしなきゃいけないのかな?と思い質問しました。 .net frameworkかなと思ったのですがCなのに?という疑問がありました。 ちょっと試してみます
- 367 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:36:50 ]
- >>366
.net frameworkじゃなくてCランタイム
- 368 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:44:54 ]
- 364 :デフォルトの名無しさん:2009/10/04(日) 21:20:37
お前は何を言ってるんだ wwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 369 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:48:08 ]
- >>366
32bit/64bit 問題だったりしてw
- 370 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:55:35 ]
- デバグビルドしてるんだろ
- 371 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:08:09 ]
- >>367
なるほど。。正確にはCランタイムが必要で .net framework入れるとCランタイムが入ってくるということですね 入れる対象マシンは私のじゃないのでモジュールだけ入れたいのですが >>359さんの方法が可能なのですかね?ちょっと調べてみます >>369 その問題がよくわかっていませんがどちらも32bit環境です
- 372 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:10:44 ]
- >>371
これは独り言だけど、コンパイルしたときの条件とか設定とかをちゃんと書くといいかもよ。
- 373 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:38:18 ]
- Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
www.microsoft.com/DOWNLOADS/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja ...
- 374 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:42:59 ]
- こっちのほうが新しい。
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
- 375 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:18:31 ]
- 質問です。VC9EEで開発しています。
以下のような関数を書いたんです。動機は自作コンテナのオブジェクトプール用のイニシャライザです。 以前の環境をリセットして再利用できるように初期化します。 で、てきとーなテストではうまくいきました。つまり、クラスや構造体のメンバ変数を0にできました。 さて、このコードはセーフなのかアウトなのか知りたいです。メモリリークなどはしてないみたいです。 そのほかにも、もっと簡単な代替手段があればご教授ください。お願いします。 template<class T> bool ZeroInitializer(T& in){ void* Mem = calloc(1,sizeof(T)); if(Mem == NULL) return false; T* Temp = new(Mem) T;//<new>をインクルードしないと使えない。 in = *Temp; delete Temp; // free(Mem); return true; }
- 376 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:38:25 ]
- >>375 です。
今日はもう寝るので明日また見に来ますです。 よろしくお願いします。
- 377 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:43:37 ]
- >>375
何か無用に難しいことやってるね。 memsetで万事解決。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:48:23 ]
- >>375
in = T() で十分だろ。 それは別としても、そのコードはアウト。 calloc() で確保したメモリは free() で解放しないとだめ。 あと、 new(Mem) T で例外が発生するとリークする。 そもそも calloc() 使って 0 初期化とか言ってる時点で T に だいぶきつい制約があるんだろうけどな。
- 379 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:49:09 ]
- >>377 C++ で memset() はねーよ。
- 380 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:50:25 ]
- >>375
メモリリークしてるかどうかはどうやって判断したの?
- 381 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:51:08 ]
- >>379
ゼロクリアする必要があるみたいじゃん。
|

|