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


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

スレを勃てるまでもないC/C++の質問はここで 15



1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
pc12.2ch.net/test/read.cgi/tech/1260842197/
スレを勃てるまでもないC/C++の質問はここで 14
pc12.2ch.net/test/read.cgi/tech/1269273471/

652 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:29:53 ]
struct Rec {
int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
};

struct Cir {
int type; /* 0なら四角、1なら丸*/
int r; /* 半径*/
};

struct Zukei {
int type; /* 0なら四角、1なら丸*/
};


void RecCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->yoko=10;
(Rec*)hoge->tate=5;
}

void CirCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->r=7;
}

653 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:31:35 ]
PrintMen(void* hoge){
switch((zukei*)hoge->type)
case 0:
sprintf("%d",(Rec*)hoge->yoko * (Rec*)hoge->tate);
case 1:
sprintf("%d",(Cir*)hoge->r * (Cir*)hoge->r * 3.14);
}

main{
zukei* x;
RecCreate(x);
(間にいろんな処理)
PrintMen(x);
}

先輩の作ったモジュール見たらこんな感じのコード出てきたんですが
CreateTri抜ける〜PrintMen行くまでにyoko、tateの情報落ちないんでしょうか?
zukeiへのポインタとしてしかxを宣言してない
(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)んで
yoko、tateの値が入った領域って(間にいろんな処理)の際に
別の変数の為に使われちゃったりしないか気になるんですが。

654 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:39:29 ]
>>653
すごい良くないコードだね。
危惧しているとおりに、違う型で上書きしなければ動くだろうけど。間違いを防止することができない良くないコードだね。

655 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:39:33 ]
ひでぇコードだな

656 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:44:36 ]
C++で仮想関数にすればまだ見られるようになりそうだが

657 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:52:37 ]
回覧板の角で頭ぶっ叩くレベル

658 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:53:30 ]
Cでクラス・継承を実装するのは結構めんどくさいよね

659 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:00:39 ]
>>658
各構造体をunionするしかないか。コンパイラのチェックが効かないから相当危険なコードになるのは間違いないが。

660 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:03:53 ]
Cなら普通にある。キミらが使っているネットワークスタックも同様に書かれている。



661 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:08:53 ]
>>660
IPのアドレス構造体なんかそうだけど。
type値で切り替えるのは有るけど普通じゃないと思う。APIなどのインターフェースとかぐらいだろ

662 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:20:29 ]
xの先はどこで確保されているんだろう。
常識的に考えればRecCreate()で確保するのが関の山だと思うが。

663 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:41:46 ]
>>652はLが無いけど、TLVな構造なんてどこでも使われてるだろ。

664 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:55:24 ]
型をコンパイラがチェックできなくなるんでお勧めできない方法だ

665 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:57:17 ]
すみません。ポインタの変数の値が壊れる事に悩んでいます。
struct DATABOX { int no; bool chk; float *data_a, *data_b; }
この構造体のインスタンス
DATABOX dbox[100]; が有るのですが、

私がまだ理解できていないテンプレートを使った移植クラスの利用の為に
DATABOX* tmp = spDAry[i]->mpObj; // 右の式がテンプレートらしく理解が・・
ここに
tmp->data_a = dbox[i].data_a;
とすると正常通過する時と、dbox[i].data_a側が 0.000000 になってしまう時が有ります。
(デバッグで手前では数値が確実に入っています。必ず0.000000以外の数値で確認済みです。)

ここ以外 dbox[100] を触っている部分は全く無い処理に入ってから壊れるので
ここしか考えられないのです。
ポインタの扱いに慣れておらず、
イコールして右の式が壊れるなんて初めてで、混乱しております。
申し訳ないですが、何がまずそうかできれば推測で構いませんので、助言頂けませんでしょうか


666 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:59:41 ]
>>665
おそらくテンプレートは関係ない。
先ずは周辺のソースを全部出せ。

667 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:02:33 ]
spDAry[i] の i が spDAry のサイズを超えてるんじゃないの?
んで、tmp が変な所指してしまってて、dbox か i かの中身を壊してるとか

668 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:55:23 ]
>>664
お勧めの方法提示してから否定しろよ。

669 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:57:34 ]
C++を使うのがおすすめですよ

670 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:58:12 ]
型をちゃんと指定するのがおすすめですよ



671 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:12:43 ]
OpenCVもCで継承使ってる部分はvoid *だな
C++だと問題ないんだが

672 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:14:56 ]
>>668
C++で継承を使うのがお勧めだろう。
今回の例だと
class Zukei
{
public:
virtual ~Zukri(){}
virtual void PrintMen()=0;
};
class Rec :public Zukei
{
int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
public:
virtual void PrintMen(){//略}
};
class Cir :public Zukei

class Rect :public Zukei


673 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:15:01 ]
他言語から使う以外に手間をかけてまでわざわざCでやるメリットは有るのか?

674 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:15:52 ]
>>672
typeは要らなかったな。こぴぺミスった

675 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:30:14 ]
>>673
新規案件ならC++だろう。
既存コード使うならCを使わざるを得ないだろうけど

676 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:41:59 ]
InitTest::InitTest(QString *p)
: m_str(QString("abc")),
m_pstr(new QString("abc"))

こんな初期化子の使い方ありだと思いますか?

677 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:48:17 ]
pはどこに行ったの?

678 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:53:33 ]
何の問題ですか

679 名前:676 mailto:sage [2010/06/15(火) 22:57:12 ]
>>677
pは消し忘れました
無視してください

>>678
ポインタは初期化子で初期化するのか
コンストラクタの中で初期化するのか気になっただけです

680 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:04:05 ]
ぶっちゃけどっちでもたいした差はないよ
初期化子でnewしてもいいし
初期化子で0クリアして後でnewしてもいい



681 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:05:56 ]
>コンストラクタの中で
そりゃ代入
QString * const m_pstr
だったら後者は使えない

682 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:20:44 ]
>>675
extern Cで十分じゃないか?
同僚にCしか使えないような奴がいるんなら別だけど。

683 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:44:26 ]
C++にはプログラムを見難くする機能が満載である。
>>652の方がずーっとまし。

684 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:45:10 ]
それはないわ

685 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:44:01 ]
>>652 はほとんどC++だからね
どっちがましかと言えば、同じようなもんだけど
C++の方がきれいに書けるだろうね

686 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:35:28 ]
>>653
>zukeiへのポインタとしてしかxを宣言してない
その通り。

>(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)
いや、Zukei構造体分の確保すらどこにもない。

>yoko、tateの値が入った領域って(間にいろんな処理)の際に
>別の変数の為に使われちゃったりしないか気になるんですが。
(間にいろんな処理)の以前、RecCreate()でyoko, tateに代入してる時点で
どこに書いてるのかわからない。
これが死なずに動いてるなら、それはただの偶然。

せめて、
main() {
Rec x;
RecCreate((void *)&x);
...
}
なら、動くだろうと思うけどさ。

687 名前:デフォルトの名無しさん [2010/06/16(水) 19:56:03 ]
ある数字の各桁をそれぞれ別の変数(配列)に代入したいんですが、いい方法ありますか?

688 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 19:57:22 ]
10で割れ

689 名前:デフォルトの名無しさん [2010/06/16(水) 19:58:11 ]
>>688
すみません、もう少し詳しくお願いします

690 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:01:53 ]
ここまでヒントもらって分からないとなるとひょっとすると脳に障害があるかもしれんな



691 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:05:33 ]
for(i = 0; n; i++, n /= 10) a[i] = n % 10;

692 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:08:35 ]
障害があったみたいです、ありがとうございました

693 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:31:37 ]
いいってことよ

694 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:53:47 ]
#include <iostream>
using namespace std;
static const int N = 1024;
static const double L = 1.0;
int main(int argc,char** argv)
{
int i;
double I[N],a[N],b[N];
double dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}
このコードで10,16と18行目でdxの値が変わるんですが17行目でdxを変えるような事はしてないと思うのですが
なんで変わってしまうかを教えてください


695 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:56:01 ]
I[i+1]

696 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:03:56 ]
#include <iostream>
using namespace std;
//static const int N = 1024;
//static const double L = 1.0;
int main(int argc,char** argv)
{
int i,N=1024;
double I[N],a[N],b[N];
double L=1.0,dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}

こっちだったら問題なく一緒になるんですがI[i+1]のところが問題あるんですか?

697 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:08:19 ]
17行目のiが最大な時のi+1は?

698 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:11:43 ]
i<N なんで最終的に i+1=N になってると思うのですが

699 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:15:45 ]
double I[N] は l[0] .. l[N-1]まで

700 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:16:50 ]
配列のサイズを[N+1]にしたら同じになるようになりました
しかしなんで同じになるのか解せません



701 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:38:23 ]
似たようなアドレスにローカル変数ブチ込んでるから配列サイズオーバーして書き込んだ結果だろ。

702 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:26:38 ]
&I[N] と &dx を出力してみると分かるよ

703 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 05:33:56 ]
あとここも直しておくように
>for(i=0;i<=N;i++){ 
>a[i]=1.0; 
>b[i]=1.0; 
>}

704 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 09:02:32 ]
質問してるときはその質問が一段落するまではなんか一時コテでも名乗ってくれや。
>694=>696=>698=>700でいいのか?

705 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 12:48:58 ]
どうでもいい

706 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:27:06 ]
メンバのstd::vector< boost::weak_ptr<T> > container にオブジェクトを追加する関数ですが

share_ptrで受けて
void add(boost::shared_ptr<T> const& sp){
boost::weak_ptr<T> wp(sp);
container.push_back(wp);
}
関数内でweak_ptrを追加するのか

それとも直にweak_ptrを受ける
void add(boost::weak_ptr<T> const& wp){
container.push_back(wp);
}
どちらがよいでしょうか

また、生ポインタを引数にとってうまくやる仕組みはないでしょうか?
それとも生ポインタは受けないようにした方が良いでしょうか?



707 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:32:39 ]
どっちでもいいです

708 名前:デフォルトの名無しさん [2010/06/18(金) 05:47:06 ]
delete a;
delete b;
とすればOKなのですが、
delete a,b;
とするとmemory leakがおきます。なんででしょうか?

709 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:13:03 ]
誰がそんな書き方ができるって言った?

710 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:31:43 ]
>>708
delete(a,b);



711 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:14:01 ]
>>708
delete a,b;
だと, はカンマ演算子なので
delete a;
b;
という感じになってるんだよ

712 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:14:12 ]
え?

713 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:15:32 ]
>>710
死ね

714 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 07:22:56 ]
delete a, delete b;

715 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:12:34 ]
可変長テンプレートで纏めてデリートがトレンディ

716 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 17:59:26 ]
int a,b;はなぜOKなのでしょうか?

717 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 18:00:52 ]
宣言だから

718 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 20:33:39 ]
delete はああ見えて演算子だからね

719 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 22:39:08 ]
マクロスエースフロンティア[YouTube]
www.youtube.com/watch?v=1yn0fYFnMKk

この動画みたいに、移動する物体(敵)を追いかけながら
曲線を描いて、ビーム、もしくはミサイルのようなものを発射するのって
どうしたら良いのでしょうか?
直線でビームを出すのなら2点間の座標を取ってその間で
動かせばいいと思うんですが
何故曲がりくねらせることが出来るのか分かりません助けて下さい><

720 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 22:48:16 ]
>>560
亀ですまんが、protectedはよく使うだろ



721 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:02:30 ]
>>719
毎フレーム玉とターゲットの位置を調べて軌道修正してる。あとスレチな

722 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:20:10 ]
>>720
どんな時に使うんだ?

723 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:42:05 ]
protected継承の話じゃなくて、protectedメンバの話だよな?
使う使う。

724 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 23:43:38 ]
>>560はprotected継承の話だぜ
まあ滅多に使わないな

725 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 00:07:29 ]
>>724
んじゃ、>>556に対して>>560が的外れなレスをしちゃったってことか。
>>556はprotectedメンバについての話をしてるもんね

726 名前:デフォルトの名無しさん [2010/06/20(日) 16:49:11 ]
メンバ変数をコンストラクタで全部0にしたいんだけどどうするのが定石?
floatとかはとりあえず考えない感じで
memset(this,0,sizeof(this));とかできんの?

727 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 17:01:18 ]
>>726
memsetは危険。できない。
メンバー変数にはコンストラクターを持つ型を使用すれば、それらは自動的に初期化される。
コンストラクターを持たない型はboost::value_initializedを使う方法がある。

728 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 17:20:11 ]
なるほど。ありがとう!

729 名前:デフォルトの名無しさん [2010/06/22(火) 15:16:18 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10731.txt
// read fd_orgfile and write on fd_cpyfile
for (;;) {
size_t read_size;
char buf[1024];

read_size = read(fd_orgfile, buf, sizeof(buf));
if (read_size == 0) {
break;
}
write(fd_cpyfile, buf, read_size);
}
に複数間違いがあると言われたのですが分かりません
お手数ですが教えて下さい!

730 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 15:31:01 ]
>729
エラー処理ができていないってことかな。

read はエラーが発生すると -1 を返すけど、size_tはunsignedなので受け取れないとか。
(read_sizeに-1を代入すると MAX_UINTにかわってしまう。 (size_t)-1 と比較すればいいんだけど。)
どうせ、1024より大きな値が返ることはないので, int read_size にしておけばいい。
writeの戻り値をチェックしていないとか。





731 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 18:50:09 ]
コンストラクタTest()の中で別のコンストラクタを呼び出したいのですが
※1のようにしてTest()を実行しても変数nameは空のままです。
※2のようにするしかないのでしょうか?
---------------------------------------
※1
Test(){
Test("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}

---------------------------------------
※2
Test(){
setName("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}

732 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 19:03:01 ]
>>731
C++0x準拠のC++ならこう書けるけどね

Test() : Test("名無し") {
}

733 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 20:53:33 ]
>732
ありがとうございます。
記述を変更したところ、
E2312 test.cpp 13: 'Test' は曖昧でない基本クラス 'Test' ではない(関数 Test::Test() )
よろしくお願いします。

734 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:04:38 ]
C++0xだとと書いてあるね。

735 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:37:32 ]
ありがとうございます。
了解です。

736 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 21:46:12 ]
>>732
これVC++2010でも対応してないんだよなあ
すっげー期待してたのに

737 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 01:36:51 ]
while(!関数名)ってあったんですけどこれってどういう意味なんでしょうか?
もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。

738 名前:デフォルトの名無しさん [2010/06/23(水) 01:47:11 ]
>>737
0を返すまでループ、って意図じゃないのか


739 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 02:00:01 ]
>>738
よく分かりました。
ありがとうございます!

740 名前:デフォルトの名無しさん [2010/06/23(水) 02:35:26 ]
日本語にするなら、1が返っている間はループ、ほうが多いかな
まあどっちでもいっしょだけど




741 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 02:45:31 ]
関数が0を返してる間はループだろw
正反対じゃねーかよ

742 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 03:37:50 ]
>>740
1が返ってきたら抜ける、と読み替えたとしてもまるでダメだな

743 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:11:13 ]
while (somefunc() == 0) って書くほうが意図がはっきりしていていいじゃないか。

744 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:50:04 ]
while(! isReady())
分かりやすい

while(isReady() == 0)
分かりづらい

745 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 10:05:20 ]
while(isReady() == FALSE)
これでおk

746 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 11:58:18 ]
LPVOIDから(ry

環境 XPSP3, VC++2008EE
DDSURFACEをDIBに変換して色情報をLPVOID lpvBitsから R=0x0F とかいう具合に
取り出したいのですが, どのようにすればいいでしょうか?
フックするのに必要だったので#define CINTERFACE してます
bool Screenshot(LPCTSTR FileName, LPDIRECTDRAWSURFACE7 lpDDS)
{
if (!FileName || !lpDDS) return false;

bool Success=false;
HDC SurfDC=NULL; // GDI-compatible device context for the surface
HBITMAP OffscrBmp=NULL; // bitmap that is converted to a DIB
HDC OffscrDC=NULL; // offscreen DC that we can select OffscrBmp into
LPBITMAPINFO lpbi=NULL; // bitmap format info; used by GetDIBits
LPVOID lpvBits=NULL; // pointer to bitmap bits array
中略)
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, NULL, lpbi, DIB_RGB_COLORS))
ERROR_BREAK(5);
if ((lpvBits = new char[lpbi->bmiHeader.biSizeImage]) == NULL)
ERROR_BREAK(6);
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, lpvBits, lpbi,
DIB_RGB_COLORS)) ERROR_BREAK(7);

ここのlpvBits[x+y*width]から取り出す場合どうすればいいのでしょう.
32bitBitMapだと仮定します.widthは中略内で宣言されてます

747 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:36:11 ]
codepad.org/b91JkFQh

これでセグっちゃうんですが何がいけないんでしょうか?
gdbで見てみたら
#0 0x00007ffff7ab3dd9 in vfprintf () from /lib/libc.so.6
#1 0x00007ffff7abecb8 in fprintf () from /lib/libc.so.6
#2 0x000000000040076c in main (argc=1, argv=0x7fffffffe8a8) at print.c:24
こんなエラーがでてきます

748 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:44:37 ]
そのループでいいのか?

749 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:50:44 ]
fopenの回数とfcloseの回数が全然違う。

750 名前:747 mailto:sage [2010/06/23(水) 12:52:01 ]
正しくはiのループはfprintfの上にあるべきだと思うんですがそれでもエラーでるんでいろいろ試してました



751 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:57:11 ]
fopenしっぱなしでfcloseしないでいると、一つのプロセスで開いておけるファイル数には制限があるので
そのうちfopenに失敗してfpがNULLになってsegvしている。

752 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:59:31 ]
何がしたいループなのかよくわからん。
datはいくつ作りたいんだよ?






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

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

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