- 1 名前:デフォルトの名無しさん [2008/08/06(水) 20:56:17 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.57【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1216215558/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 2 名前: ◆3.JjF77I26 mailto:sage [2008/08/06(水) 20:59:15 ]
- 2get
- 3 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 21:17:19 ]
- 刀、 , ヘ
/´ ̄`ヽ /: : : \_____/: : : : ヽ、 ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : } /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : / ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/ /: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/  ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/ /: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、 . /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\ /: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \ / / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :} l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : / |: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ !: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ V ヽ| }/// r‐'⌒ヽ イ〉、 ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1乙じゃなくて ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
- 4 名前:デフォルトの名無しさん [2008/08/06(水) 21:19:28 ]
- ,. -─‐ー=-<._ ノ―- 、
,. '´: : : : : : : : : : : : : :`:<: : : `ヽ、_` 、__ ,. -一'´: : : : : : : : : : : : : : : : : : ヽ: : : : :.ヽ ̄ ,. '´: . : : : : : i: : : : : : : : :ヽ. :',: : :.丶: : : : :.\ ,. '´ ,' イ:.∧:.ヽ: : : : : : :.',: : : . .:',=-: :}:::: : :|: : : ヽ _,. '´-‐'7 . . : : : : :/|:.l ヽ: :l\‐- 、: :.',: : : : :.!: : :.`、::: :lミ、: :.}/^i .  ̄ /: : : : :i: : : : l, |:.| \! \: : : : ',: : : : .!: :.〃}::: :l }: :/ イ /: : :./: :!: : :./| l:| ヽ \: : :.',: : :l:.|: ://:|::::/ノ‐'´ノ/ /: : /{: : |: : : : | l:l r勿示ミ、',: :.!:.|彡':::!:/´ ィ_ l: :/ !: : l: :.l: :.lxィキ !::fr..:ト、!: ト.:ト、::::从 ,. ' ´ `i |/ |: : :!: ヽ.:{ 代..ヽ 代.じ:| |: l´ヘ Y ノ'´ | |: : : ',: :.ト〈{:::じi| 辷ソ !/ }} ノ / l._ 私じゃ>>1乙って出来ないみたい l: : : ∧:.い弋ソ . xxx ,.ァ ' { } l: : / ヾヽ}xxx __,. ∠、 l l !: :l ヽ、.__ ,. ィ〃: : y'⌒ヽ、! | ヽ{ ,.`「¨刀´ /: : / >、 l ノ ノ: : :l /: / ,. '´ .::rヽ、 ヽ / ヽ: : :.l // / ,.. | } { \:| // ,. '´ / ! | /\ Y/ イ / ノ
- 5 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 01:34:19 ]
- >>4
つかさちゃんきゃわあああああああああああ!!!!!!!!!!!! つかさちゃんとちゅっちゅしたいよ〜
- 6 名前:デフォルトの名無しさん [2008/08/07(木) 01:47:42 ]
- gdbで一行ずつ見ていくとSegmentationFault出さずに終了するんだけど
普通に実行するとエラー吐いて終了してしまいます。こういう場合どんな原因が考えられますか?
- 7 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 01:49:47 ]
- >>6
ポインタが初期化されていない
- 8 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 16:54:51 ]
- うははははは
- 9 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:49:32 ]
- float i = 0.0f;
while( i != 7.0f) { i += 0.1f; } これだとwhileで7が認識されず終わらない。 0.2とか色々数値を変えても終わらない。 でもi += 1だと終わる。 なぜか 1を半分に割っていく数値0.5,0.25.0.125といった数値なら抜けれる。 謎過ぎてもう頭がパーンしそう。 誰か原因わかる人居ますか?
- 10 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:54:18 ]
- >>9
そこまで分かってるなら、もう分かるだろ。
- 11 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:54:54 ]
- >>9
9割自分で答えが導けてるじゃないか 2進数で小数を表現すると、0.5、0.25、0.125…しか正確に表せないからだよ でも丸めが出るから処理系によって上手く「動いてしまう」ときもある。
- 12 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:55:10 ]
- 浮動小数点数でwikiれば自ずとわかる
- 13 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:56:02 ]
- >>9
浮動小数点数(float/double)で表現できる数値について
- 14 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:57:28 ]
- 学校の宿題なんだろ。
>なぜか 1を半分に割っていく数値0.5,0.25.0.125といった数値なら抜けれる。 これは、そのヒントっぽいな。本人はわかってなかったり。
- 15 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:00:46 ]
- な・・なんだと・・・
そんな法則があったのかw 自力でその法則を発見した俺は数学者になる素質があるな、と思った。 とりあえずおまいらありがとう。
- 16 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:03:13 ]
- 数学者?
- 17 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:18:35 ]
- >>15
すばらしい。
- 18 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:22:30 ]
- 車輪の再発見、数学屋のサヨナラ
ttp://jp.youtube.com/watch?v=c2SURtxy6i0
- 19 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:58:58 ]
- 少数を比較するときは範囲で比較しようって学校で教えてくれなかったんか?
- 20 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:28:33 ]
- 複数行の文章が書いてあるテキストファイルから
一行ごとにもじれすを抜き出す方法を教えてくださいm(_ _)m
- 21 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:53:10 ]
- もじれすってなに?
- 22 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:55:11 ]
- 文字列のことだろうか。
fgets()は? あるいはcin.getline()とか。
- 23 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 11:47:26 ]
- ttp://www.rupan.net/uploader/download/1218163435.cpp
上記ファイルの内容は、キュー構造をint型配列を用いて実装したものです。 これは、リストを用いてキュー構造を実装したものと比較して、完全に劣るものでしょうか? 占有するメモリ量の点で劣っているのは分かっています。
- 24 名前:デフォルトの名無しさん [2008/08/08(金) 12:08:50 ]
- 申し訳ありませんが、詰まってしまったので・・・
XP SP2 VS2005 c++8.0 なのですが、 MultiByteToWideChar を行った際に、変換後の文字列にゴミが付加されてしまいます なぜなんでしょ・・・ 以下、コードです。よろしくお願いします。 CString UtoT(const xmlChar* str, int len) { CString ret; if (str) { int wclen = MultiByteToWideChar(CP_UTF8,0, (LPCSTR)str, len, NULL, 0); LPWSTR wcbuf = ret.GetBuffer(wclen); MultiByteToWideChar(CP_UTF8, 0, (LPCSTR%
- 25 名前:24 [2008/08/08(金) 12:11:15 ]
- 途中送信に成ってしまったので、もう一度。
CString UtoT(const xmlChar* str, int len) { CString ret; if (str) { int wclen = MultiByteToWideChar(CP_UTF8,0, (LPCSTR)str, len, NULL, 0); LPWSTR wcbuf = ret.GetBuffer(wclen); MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, len, wcbuf, wclen); ret.ReleaseBuffer(); } return ret; }
- 26 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:15:23 ]
- >>24-25
0でターミネートしてないだけじゃない? MB2WC()のlenをlen+1にすれば解決する予感。
- 27 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:39:28 ]
- >>23
たぶん配列のキューの方が速い 要素を追加/削除するたびにメモリの確保/解放をせずに済む リストのキューは、追加/削除するたびにノードを確保/解放する必要がある メモリ効率は、配列のキューは要素が空いててもその分のメモリを解放できない点で無駄があるが、 リストのキューも要素ごとに次のノードを指すポインタが必要という点でやはり無駄な部分がある どっちが特に優れているというわけではない 状況に応じて使い分けるもの
- 28 名前:24 [2008/08/08(金) 12:46:26 ]
- >>26
解決しました。ありがとうございます。
- 29 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:55:17 ]
- >>27
ありがとうございました。 キューのサンプルを探したところ、リストを用いたものばかりだったので 疑問に思い、質問した次第です。
- 30 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:57:54 ]
- 地震だ><
- 31 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 14:41:50 ]
- キューならstd::dequeかboost::circular_bufferが良いのじゃないかな
- 32 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 14:58:10 ]
- >31
ありがとうございます。 わざわざ作らずとも、すでに用意されているのですね
- 33 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 21:09:10 ]
- こんにちは。ポインタと free() についての質問になると思います。
C は初心者ながらも単機能な Web サーバを作ってみようと思い立ち、 libevent を触ってみています。 evbuffer という構造体が出てきますが、 evbuffer_free() では orig_buffer と buffer を free() しています。 void evbuffer_free(struct evbuffer *buffer) { if (buffer->orig_buffer != NULL) free(buffer->orig_buffer); free(buffer); } そこで、 orig_buffer と buffer の正体を見てみようと、 PHP でいう print_r のような関数を作って調べてみました。 evbuffer: 0x606080 size_t misalign: 0, totallen: 256, off: 4 void* cb: 0x0, cbarg: 0x0 u_char* buffer: 0x609100 [HOGE] u_char* orig_buffer: 0x609100 [HOGE] buffer と orig_buffer は同じ場所を指しているように見えます。 二回も free() して大丈夫なのでしょうか。
- 34 名前:32 mailto:sage [2008/08/08(金) 21:11:20 ]
- 関係ありそうなところをはっときます。直リンクがうまくいくかわかりませんが…。
libevent/event.h (BSDL) toku.xdisc.net/cgi/up/vcc/nm0687.txt libevent/buffer.c (BSDL) toku.xdisc.net/cgi/up/vcc/nm0688.txt testcode.c (as-is でお願いします) toku.xdisc.net/cgi/up/vcc/nm0689.txt
- 35 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 21:20:12 ]
- >>33 のアドレスでいうと
if(0x609100 != NULL) free(0x609100); free(0x606080); になると思いますよ
- 36 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 21:23:53 ]
- ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
free() はポインタ ptr が指すメモリ空間を解放する。 このポインタは、以前に呼び出された malloc(), calloc(), realloc() のいずれかが返した値でなければならない。 これ以外のポインタを指定したり、すでに free(ptr) が実行されていたりした場合の動作は定義されていない。 ptr が NULL の場合には、なんの動作も行われない。
- 37 名前:32 mailto:sage [2008/08/08(金) 21:36:55 ]
- >>35
よくわかりました。ものすごく勘違いしていました! free(buffer->buffer); しているものと空目していました。 ありがとうございます!
- 38 名前:デフォルトの名無しさん [2008/08/08(金) 22:22:48 ]
- Effective C++ 第3版12項にコピーコンストラクタの実装でコピー代入演算子を
呼び出すことはナンセンスと書いてあるが、実際どういう弊害があるんですか? これでいい気がするんだけど。 ClassA& operator=(const ClassA& rhs) { メンバ変数 = rhs.メンバ変数; return (*this); } ClassA::ClassA(const ClassA& rhs) { (*this) = rhs; }
- 39 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 22:53:35 ]
- 初期化リストが使えないとか
その例だと意味無いが
- 40 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 23:52:12 ]
- >>38
もしoperator =はthisがすでに初期化済みであることを前提にしたコードを書いた場合、 コピーコンストラクタの中では初期化されていないので=演算子を使えないという事態に陥ってしまう。 そうでないとしても、時と場合にもよるが一般的にデフォルト構築+代入演算はコピーコンストラクタよりコストがかかるとされている。 Effective C++に載っていなかった気がするからここに書くけど、 こうやって、=演算子はコピーコンストラクタ(とswap)を使って実装できる。元ネタはExceptional C++。 ClassA& operator=(const ClassA& rhs) { ClassA tmp(*this); tmp.swap(rhs); return *this; }
- 41 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 23:58:59 ]
- 実害はないんじゃないの?
「覚えておくこと」のところに共通の処理は別の関数に実装すれば良い みたいなこと書いてあるし 「代入は既に存在するモノの値を変えるのに使う。 まだ存在していないモノに対して行うのはおかしい」って事だと読み取ったけど
- 42 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 07:47:52 ]
- newで確保した領域の容量ってsizeofで求められないんですか?
byte *p=new byte [1000]; int size=sizeof(p); ってしてもsizeof(p)が実行されなんですが何で?
- 43 名前:デフォルトの名無しさん [2008/08/09(土) 08:04:28 ]
- >>42
実行されます。 ポインタのサイズが返ります。
- 44 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 08:42:21 ]
- >ってしてもsizeof(p)が実行されなんですが何で?
どうして>42みたいな質問する奴ってこれだけの文章もまともに書けないんだろうな。 しかも、ちょっと探せばすぐに見つかるのに。
- 45 名前:38 [2008/08/09(土) 10:55:23 ]
- >>39-41
参考になります。 コストはかかるがoperator=をそれなりに実装しておけば問題ないってことですかね。
- 46 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 12:12:19 ]
- atan2のテーブルを高速参照したいんだが何かいい方法はないですか?
高速であればテーブルじゃなくてもいいです 環境はcygwin上のgccで、math.hとかはあります
- 47 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 12:15:15 ]
- >>46
必要な精度、引数の制約条件は?
- 48 名前:46 mailto:sage [2008/08/09(土) 12:52:21 ]
- >>47
精度は単精度floatです。 制約条件っていうのがよくわからないので教えてください
- 49 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 14:02:30 ]
- >>48
引数ってんだから、その形式とか範囲とかじゃね? 三角関数系はゲームとかだと360度やラジアンでやるより 一周を0xffや0xffffにしたほうが扱いやすいし…、とかそういう ことだと思うが。あ、おれ47じゃないから
- 50 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 14:23:07 ]
- >>49
形式はfloatで1周1024で分割 ってかんじでいいんですかね?
- 51 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 14:38:22 ]
- それだったら、単にテーブルを作るだけでいいと思うが。
- 52 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 14:39:30 ]
- atan2だと、引数の精度(x,y)がfloatで、戻り値の角度が一周1024ってこと?
45度ごとに場合分けして、小さい方を大きい方で割って、 まあ2048倍して、テーブル2048個から0〜1023を返すようにすりゃいんじゃない? 倍にしてるのは気分的に。
- 53 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 14:40:50 ]
- あ、ちょっと違うか、1週1024なら45度の範囲だとその
1/8のテーブル量で済むわ
- 54 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:25:42 ]
- どうでもいいけど、atanをあーたんと読むとちょっとカワイイよな
- 55 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:33:17 ]
- 独学でC++、DirectX、Win32APIでゲームを作り始めたんですが、
いつも設計に悩まされ、綺麗な形にできません。 起動した瞬間開始する単純な2Dシューティングから始まり、 メニュー画面を追加し、一時停止画面を追加し、 エロゲーみたいな会話画面をはさみ、3D描画を入れたりと、 機能追加するごとに、設計がぐだぐだで汚くなっていきます。 プログラムは2chとグーグルだけで覚えたので、 他人が作ったアプリのソース全体を見たことがないんですが、 アプリケーション全体の設計を勉強するにはどうすればいいでしょうか? 何かお勧めの本があったら教えてもらえませんか。
- 56 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:34:22 ]
- あーくたんもカワユイ
- 57 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 16:43:22 ]
- >>55
適当なデザインパターンの本を読んでふむふむと思いつつ、 あとは習うより慣れろで行くしかないと思う。 俺も同じような時期があったから一言だけ言わせてもらうと、 『本当に必要のないものは実装するな』の一言に尽きる。 >>54 こたんはなんか犯罪の香り
- 58 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 17:08:08 ]
- >55
まずは構造化プログラミングですね。>57の言うようにデザインパターンとかってのもあるけど、 >起動した瞬間開始する単純な2Dシューティングから始まり、 >メニュー画面を追加し、一時停止画面を追加し、 >エロゲーみたいな会話画面をはさみ、3D描画を入れたりと、 >機能追加するごとに、設計がぐだぐだで汚くなっていきます。 を見る限りでは、オブジェクトとのマッピングや責務分割を考えるよりも、スパゲッティっぽくなってるのをちゃんと整理する力をつけるのが先かと。 あと、今時、全てを一つのEXEで作らなくても良い、と言うのも重要。
- 59 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 17:25:52 ]
- ゲームだとタスクシステムとかかなぁ
- 60 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:09:19 ]
- >>43
ありがとう ずっと確保した容量が返ってくるものだと勘違いして使ってた
- 61 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:42:01 ]
- 確保サイズが知りたい場合は_msizeだそうな(注:Windows限定)
- 62 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:15:29 ]
- × Windows限定
× VC限定
- 63 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:17:03 ]
- >>62
ワロタ
- 64 名前:55 mailto:sage [2008/08/09(土) 20:31:01 ]
- >>57
まだ、何ができるかをちゃんと把握してないので、 思いついたものや試しをどんどん追加実装してるのが一番問題っぽいですが、 習作なので仕方ないかなとも思います。 実装するものの全体像を把握するまで、慣れるしかないですかね。 >>58 EXEを分割できるとは知りませんでした。 そういう場合、複数EXEで共用するモジュールを作ったりするんでしょうか。 それともまったく独立して複数作るんですか?
- 65 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:57:30 ]
- >実装するものの全体像を把握するまで、慣れるしかないですかね。
ゲームプログラマーから一言。 あとからいくらでも追加に耐えられるように組むこと。 全体像なんて最初から最後まで同じである保証なんてどこにも無いよ〜 >EXEを分割できるとは知りませんでした。 ニュアンスが違うんじゃないか? ゲームだったらEXE一個だよ。分割なんか考えなくていい。 まあ機能ごとにDLLに分解するのはあると思うが、まだそんなこと考えなくてもいいだろう。
- 66 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:00:01 ]
- >>65
拡張性を無視して作って変更が出たら作り直すって手法なかったっけ? 一回やってみたいと思ってるんだが勇気がなんだ
- 67 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:02:13 ]
- アジャイル?
- 68 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:04:26 ]
- >>66
>拡張性を無視して作って変更が出たら作り直すって手法なかったっけ? かってにすればーw 冗談じゃねー、1回作り直すのに数年かかるわ!
- 69 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:05:36 ]
- XP?
- 70 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:09:07 ]
- >>67>>69
ああ、そんなんだった、調べてみる >>68 >冗談じゃねー、1回作り直すのに数年かかるわ! 俺もそう思うんだ、だからやってみたことはない。 でも手法として確立してるからにはどうにかなるのだろうとは思う。 ちょっと調べてみていけそうなら今度提案してみる。
- 71 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:14:43 ]
- XPでなんとなく理解できたのはペアプログラミングくらいだったな
- 72 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:32:10 ]
- >>52,53さんありがとうございます。
また質問になりますすみません。 環境は>>46と同じです error: cannot convert 'Bullet (*)[100]' to 'Bullet**' for argument '4' to 'void Shot(int, Image*, MyShip*, Bullet**)' という意味はわかるのですがですが、改善法が分からないエラーが出て困っています typedef struct{ 略 }Bullet; Bullet shot[100]; Shot(ctrlmode, bullet, &MyShip, &shot); void Shot(int shot_ctrl_flg, Image* Star,MyShip *MyShip,Bullet *shot[]){略} どこがいけないのでしょうか?
- 73 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:35:51 ]
- 構造体の中身を全て = 0 にするにはどうしたらいいですか。
宣言のときなら struct hoge a = {0}; でできると思いますが。 全ての中身に対して = 0 をするコードを書くしかないですか。
- 74 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:37:22 ]
- 構造体の中身が全て整数型なら0にmemsetすることで実現できます。
それ以外の場合は0を意味する値を代入するしかありません。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:44:03 ]
- >>73
struct hoge a; ...; struct hoge zero = {0}; a = zero;
- 76 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:52:47 ]
- a = hoge();
- 77 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:53:49 ]
- >>72
Shot(ctrlmode, bullet, &MyShip, shot); void Shot(int shot_ctrl_flg, Image* Star,MyShip *MyShip,Bullet shot[]){略}
- 78 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:55:23 ]
- >>72
引数shotの型が違う。 Bullet shot[100]; のとき、&shotは配列へのポインタで 関数の仮引数のBullet *shot[]はBulletへのポインタへのポインタ。 何がしたいのか良く分からんけど。 Bullet shot[100]; void Shot(int shot_ctrl_flg, Image* Star,MyShip *MyShip,Bullet *shot){略} か Bullet *shot[100]; void Shot(int shot_ctrl_flg, Image* Star,MyShip *MyShip,Bullet *shot[]){略} こうで、 Shot(ctrlmode, bullet, &MyShip, shot); こうじゃね?
- 79 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:16:58 ]
- >>78
配列がまずいのですかね? 両方ともやりましたが結果は同じでした・・・
- 80 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:19:24 ]
- MyShip *MyShipってありなのかぁ…
- 81 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:24:44 ]
- >>79
結果は同じって同じエラーってこと?
- 82 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:55:22 ]
- newでchar型の配列を1521090492個以上確保したらエラーがでるのですが何故でしょうか?
メモリは4G積んでるんでメモリが足りなくて確保できないってことではないと思うんですが newで確保できるのは1521090492byteまでって決まってたりするんですか?
- 83 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:57:40 ]
- それはコンパイラを作った人に訊いてくれ。
- 84 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:09:26 ]
- どんなエラーよ?
他にもOSとかコンパイラとか色々あるじゃん。書くことが。
- 85 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:09:59 ]
- ごめんなさいコンパイルは通るけど、それを実行すると確保するところでエラーでる
mlock.cの void __cdecl _unlock (int locknum){ //leave the critical section. LeaveCriticalSection( _locktable[locknum].lock ); } で 0x7d4f2366 でハンドルされていない例外が発生しました: Microsoft C++ の 例外: std::bad_alloc (メモリの場所 0x0012fe40)。 ってエラーがでます これってコンパイラかデバッガの仕様なんですか? ソースはこんなのでnewのところでエラー int main(){ char *p; p=new char [1521090493]; delete [] p; return 0; }
- 86 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:13:25 ]
- >>85
そもそもWindowsでは32ビットアプリで32ビット(2GiB)以上のメモリ空間をアクセスする単純な手段は提供されていません。 大人しく64ビットアプリを作るか、ありえないメモリ戦略を諦めることをお勧めします。
- 87 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:13:45 ]
- OSはXPx64でコンパイラはVisualStudio2008Proです
タスクマネージャでみるとメモリのコミットチャージは newで確保前は470MB/3826MBで充分空いてます
- 88 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:13:49 ]
- std::bad_allocでググれば。
- 89 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:17:44 ]
- >>86
ありがとうございます。32ビットでも2Gまでならいけるはずですよね とりあえずこんなに確保するつもりは無いんですが、色々試したら[1521090492] を超えたところでエラーがでたので興味本位できいてみただけです。 >>88 ググったら色々情報でてきた。あとは自分で調べてみることにします
- 90 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:23:14 ]
- ゲームでアジャイルとかできるんかね。
ゲーム作ったことないけどテストパターンが割りと膨大になりそうにおもう。
- 91 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:34:15 ]
- Code::Blocks(MinGWつき)とwxWidgetsをWindows XPにインストールした後、
「壮大な一歩を踏み出すぞ〜」と意気込んで、とりあえずwxWidgetsプロジェクトではなく 以下のコードをビルド、出来上がったexeをコマンドプロンプトにて実行しました。 #include <iostream> using namespace std; int main() { cout << "こんにちわ世界" << endl; } 日本語は文字化けしてしまったので、プロンプトのフォントをMSゴシックに変えたんですが それでも駄目で、壮大な一歩を踏み外してしまいました。 Unicodeがらみの文字化けというところまでは分かるのですが、解決策が分かりません。 Code::Blocks WikiのWxWindowsQuickRefに書かれているBuild wxWidgetsはすでに終えたのですが、 まだwxWidgetsを使う所まで行ってないので、関係ないだろうし。 Code::BlocksとwxWidgetsでC++を始めようと考えていたのですが、かなり道は険しいようです……。
- 92 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:41:13 ]
- >>91
ソースコードの文字コードを変えてみては?
- 93 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:43:18 ]
- なんでもいいけど、int main なら値返そうよ。
2歩目も怪しい。
- 94 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:00:03 ]
- >>93
C++ならmainでreturnしないとreturn 0:したことになるって規則があって問題ない。 省略していいかどうかはまた別問題。
- 95 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:02:54 ]
- UNICODEで文字列を表示したいのか
単に日本語を表示したいのか
- 96 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:23:39 ]
- >>91
g++なら--input-charset=cp932 --exec-charset=cp932でどう? Code::Blocksでどう設定するかは知らないけど。
- 97 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:00:10 ]
- ソースをUTF-8か何かで書いてるのかな
- 98 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 05:48:46 ]
- これって問題あるでしょうか?
struct hoge { int x; }; hoge *ptr; hoge &ref = *ptr; ptr = new hoge; //参照を作った後に確保 ref.x = 1; //参照からアクセス
- 99 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 06:09:09 ]
- 問題なし
- 100 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:14:01 ]
- >>98
問題あり
|

|