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


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

【初心者歓迎】C/C++室 Ver.37【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1175436073/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


562 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 23:26:48 ]
「構造体とクラスは無関係」という人をよく見かけるけど、
構造体からヒントを得て、クラスという概念を作ったわけではないの?
構造体使ってて、あー、こういう風にしてーなー、と思ったところを、
クラスという形で実現したのであれば、
無関係ってちと言い過ぎじゃないかなー、とか思うんだけど。

563 名前:デフォルトの名無しさん [2007/05/24(木) 23:29:18 ]
switch(event)
{
case1:
foo;
case2:
bar;
default: ←100行目
}

if( !p1)
{
・・・
GOTO Test;

Test: ←100行目
}
gcc version 4.1.2 で、
上のように、default: や Test: の後が空行のまま } がくると、次のようなエラーがでます。

handle.c:100: error: label at end of compound statement

これは仕様なのでしょうか?
default: は消し、 Test: は {}の外にうつして回避したのですが、それで正しいでしょうか。
アドバイス、よろしくお願いします。

564 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 23:31:09 ]
>>563
ラベルの後には文が必要です。
;(セミコロン)だけでも付けましょう。

565 名前:563 mailto:sage [2007/05/24(木) 23:39:39 ]
>>564
セミコロンをつけたところ、コンパイルがとおりました。
どうもありがとうございました。

566 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:35:43 ]
www.uploda.org/uporg822044.c
この選択ソートのプログラムをswap関数を用いて作り変えたいと思い、
下記のようにしてみたんですが、うまくいきません。
www.uploda.org/uporg822047.c

何が悪いのか教えてください。お願いします。

567 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:37:39 ]
swapに渡されるのは引数のコピーだ

swap(int* a,int* b);

568 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:56:53 ]
色々やってみましたが、分かりませんでした。
よろしければ正解例を示していただけないでしょうか。
お願いします。

569 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:02:35 ]
よくみたら内部で配列を交換してんのか

つうかコレコンパイルできなくね?

面倒だからとりあえず
int i,j,k,work,num,a[100];
をmainの外に出せば動くんじゃね

570 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:06:42 ]
>>569
はい、566の下のソースはコンパイルできていません。
mainの外に出してもできないようです。



571 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:19:43 ]
mainの外に出したら動いたわけだが、、、

572 名前:デフォルトの名無しさん [2007/05/25(金) 01:45:14 ]
>>570www.uploda.org/uporg822246.c

573 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 05:35:49 ]
mciSendStringでnotify(+MCI_NOTIFY_SUCCESSFUL)で
ループ再生を行っている時、
まれにループに入るタイミングでループされず、
永遠とnotifyが投げられビジー状態になってしまいます。

100回に1回も起こらないので、原因は良く分かりませんが、
もしかしたら、曲を変えようと前の曲をstop、closeし、
新しい曲をopen、playするのと同じぐらいのタイミングで
notifyが来た時に起きているのかもしれません。

対策方法などがありましたら、教えてください。

574 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 06:26:54 ]
再生するファイルの種類は何かね?あとOS

575 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 08:12:19 ]
×永遠と
○延々と

576 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 09:01:26 ]
>>562
C++のクラスはSimulaからのインスパイヤ

577 名前:573 mailto:sage [2007/05/25(金) 09:22:55 ]
>>574
ファイルはmidi、OSは9xです。

>>575
素でやってしまいました・・

578 名前:573 mailto:sage [2007/05/25(金) 09:34:53 ]
後、もちろんmciSendStringの戻り値は0(成功)です。
音楽を変えるためstop、closeした後、
前の曲のnotifyが来てしまいおかしくなるのかもしれません。

notifyが連続で来る事は普通は無いので、
その時は、playをsendしないようにする方法とかもあると思うんですけど。

579 名前:デフォルトの名無しさん [2007/05/25(金) 10:20:06 ]
stringはあまりよくないと聞いたことがあるのですが
charの配列を使うよりstringを使ったほうがいいですよね?

580 名前:566 mailto:sage [2007/05/25(金) 10:50:50 ]
>>572
ありがとうございました。
保存したので、もう消していただいてもかまいません。



581 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 11:06:24 ]
>>579
好きにすればいいと思うよ。
配列とnew/delete演算子と
テンプレートクラスの勉強が済んでいる前提で。

582 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 11:54:11 ]
>>579
よくない理由を問い詰めておけ。

583 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 12:21:45 ]
1方向Listを作っています。参考書等で調べたのですが
削除関数の部分をどう記述すれば良いのか分からないので教えてください。
uproda11.2ch-library.com/src/116479.c

584 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 12:30:56 ]
>>583
まずは自分で書けよ。今のソースじゃどういう動作にしたいのかもわからん。

585 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 14:03:27 ]
もうソース見えん。

削除ってのはさ、
A→B→C のBを消すときにAの指してる先をCにしてBを消せばいいわけだ。
でも片方向でBの前を探すのは面倒だから、Bが指してるCの内容を
そっくりBにコピーしてCを消す、というトリックが使える場合があるぞ。

586 名前:デフォルトの名無しさん [2007/05/25(金) 15:20:22 ]
mfcについて教えてください。

通信受信プログラムで受信データをエディットコントロール(複数行表示)に表示しているのですが、
以下のコードでは、エディットコントロールに文字列を追加する際に必ずスクロールされてしまいます。
スクロールされない方法を教えてください。

int iLen = edit->GetWindowTextLength();
edit->SetSel(iLen, iLen);
edit->ReplaceSel("Hello\n");

WinXP & Visual Studio 2003 & mfc7です。

587 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 15:31:32 ]
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

588 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 15:37:31 ]
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

589 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 15:38:59 ]
>>586
MFCスレへどうぞ。
つーか、LineScrollで元のとこに戻せばいいんでないの?

590 名前:デフォルトの名無しさん [2007/05/25(金) 16:24:49 ]
>>589
レスありがとうございます。

LineScrollで戻すと、1行書くごとに「下へスクロール→上へスクロール」となり、上下にスクロールが発生してしまい
とても見づらくなってしまうのです。

「スクロールなし」でエディットコントロールに文字列を追加できないものでしょうか?



591 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 16:57:37 ]
!(ΦyΦ+){???}

『のだめカンタービレ』

592 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 16:58:53 ]
!(ΦyΦ+){???}

『のだめカンタービレ』

593 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:12:41 ]
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

594 名前:つ[SetRedraw()] mailto:sage [2007/05/25(金) 17:13:25 ]
>>590
誘導されているんだから更に質問するなよ。

595 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:14:57 ]
>>593
C++/CLIは最早C++でさえないので該当スレへ。つーか、プロパティだか属性だか知らんが編集可否とかカーサ表示有無とかないの?

596 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:21:17 ]
>>595
それが無くて困ってますorz

該当スレ = C++/CLI について語ろうぜ Part2
で質問してもいつもスルーされてしまうんですorz

597 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:23:06 ]
そりゃ、明らかにC++/CLIの話題じゃなくて、.NET FrameworkなりCLRなりの話題だもん。

598 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:28:00 ]
自分でスレ立てるしかないですかね?

599 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:36:19 ]
>>598
やめれ。

600 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:37:26 ]
>>598
やめれ。



601 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:40:29 ]
>>598
やめれ。

602 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:40:44 ]
やめときますorz
どこに書き込んでも
>こんな奴がC++出来るんだぜとかいってると思うとため息出るな・・・
とか
>(゚Д゚)
みたいに馬鹿にされますorz

これってそこまで初歩的な質問ですかね?

603 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:59:05 ]
>>602
ヘルプぐらい見ろよ。
MSDNで「TreeViewメンバ」一覧とか見れば、
BeginUpdate ツリー ビューの再描画を無効にします。
とか思いっきり書いてあるだろ。
日本語読めないの?

604 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:00:21 ]
>>602
> そのアプリのテキストボックスには、カーソルが表示されていません。
> どのようにすれば、カーソルを表示させないようにできるのでしょうか?
>
とりあえず、この文面だとカーソルを消したいのか表示させたいのか分からん。
あとこの場合は、マウスの移動とともに表示される矢印のマウスカーソルと、
テキストの間に表示される縦棒の二つの意味にとれるので、
そこも説明する必要あり。

605 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:15:45 ]
>>603
あったんですか(゚Д゚)

>>604
テキストの間に表示される縦棒を消したいです。

606 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:30:52 ]
>>602
スレ違いって指摘されているの判る?
それでも居座るような状態だから馬鹿にされるんだよ。

607 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:54:14 ]
俺はこのスレでC++/CLIを出してきても構わないと思うけどな
まあ答える奴は少ないだろうとも思うけど

602が答えを得られないのは602自身の問題

608 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:58:10 ]
片っ端からマルチかよ。
そりゃ答えてもらえないわけだ。

609 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:36:14 ]
構造体の末尾にパディングを入れてサイズを固定にしたいのですが、

struct hoge {
  int a;
  int *b;
  hoge *c;
  char padding[???];
};

例えば sizeof(hoge) == 16 になるようにしたい場合、??? にはどう書けばいいでしょうか?
16 - offsetof(hoge, padding) とか書ければいいのですが。

610 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:50:08 ]
paddingまでが詰まってる前提なら
16-sizeof(a)+sizeof(b)+sizeof(c) でいいんじゃね

試してないけど



611 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:58:19 ]
16バイトの配列との共用体にするとか

union hoge{
  char size[16];
  
  struct {
    int a;
    int *b;
  };
};


612 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 21:06:47 ]
テキストに入力できる状態なら
縦棒消すの無理じゃない?

613 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:01:17 ]
なぜなのかよく分かりませんが、LimeChat 2というIRCでチャットをするためのソフトでは、点滅しているカーソルが表示されていないんです

614 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:13:11 ]
キャレット表示されてないと入力編集がものすごく難しくないか?

615 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:14:43 ]
チャットソフトだからログ表示部品と発言入力部品が別なんだろ。
でログ表示部品にキャレット(カーソル)が出てしまうのがウザイと。

616 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:21:29 ]
おまえらどこか一箇所でやれよw

617 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:27:44 ]
ぐぐったらこんなのが引っかかった
BOOL HideCaret(HWND);
つーわけで消したいEditBoxのhwndを放り込んで使ってみよう

618 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 04:34:05 ]
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
でなんとかキャレットを非表示にできそうです。

しかし、外部シンボル ""extern "C" int __stdcall HideCaret(struct HWND__ *)" (?HideCaret@@$$J14YGHPAUHWND__@@@Z)" は未解決です。
というリンクエラーが出てしまいましたorz

619 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 06:05:17 ]
>>593=>>602=>>605
.NETの話はVCスレ行けよ
キャレット(カーソル)うんぬんとかWin32APIスレ行けよ

620 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:26:09 ]
>>618
user32.libをリンクしろ

>>619
環境依存ネタOkなスレだからありだろ



621 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:50:12 ]
環境以前にスレ違いなわけだが

622 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:32:12 ]
シフト演算(<< >>)ではなく、ローテートを行いたい場合、どのようにすればよいのでしょうか?

623 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:41:59 ]
左右シフト演算をORで結合、かな。
コンパイラに拠っては、rotに展開されるであろう
組み込み関数とかがあるかもしれないけど。

624 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:49:45 ]
組み込み関数あるね
unsigned long _lrotl(unsigned long value, int shift) 符号なし long 型整数の各ビットを左にローテートします。
unsigned long _lrotr(unsigned long value, int shift) 符号なし long 型整数の各ビットを右にローテートします。
unsigned int _rotl(unsigned int value, int shift) 符号なし整数の各ビットを左にローテートします。
unsigned int _rotr(unsigned int value, int shift) 符号なし整数の各ビットを右にローテートします。


625 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 11:44:25 ]
>>620さんのおかげで解決しました。ありがとうございました。

>>621
スレ違いなら消えますorz

626 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 11:55:41 ]
何度もスレ違いって言われてるだろ。
さっさと消えろやこの世からもな!

627 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:15:39 ]
    _、,、
  θ《▼》θ                                  ; ,;从 , ガッ
  ノリ#゚−゚リ)((ニ(ニ(l     チュドーン   ..,  ''"´"''': ; .     、゙,',::、⌒::;.,'."));": ←>>626
  ( ノ つ|_||三三二弌ll============lニlll),,'   . : ;  _,; "   `.、:.(`:'⌒::"`.;`⌒゙":ドカーン
  《ソ|__/|ニ〃l,=l┘               "'' -''''"´    ;;.゛;((:;;`';::,");;";;;))`.;
    し'ノ                              ゛;((:;;`::"`.;`⌒゙);;";;;))`.;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おまえが死ねよ
価値がないのはおまえだろw

628 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:24:24 ]
そもそもCLIってなんですか?なにに使うんですか?

629 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:27:21 ]
>>628
ja.wikipedia.org/wiki/%E5%85%B1%E9%80%9A%E8%A8%80%E8%AA%9E%E5%9F%BA%E7%9B%A4

630 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:31:16 ]
.NETプログラミングのことですか?



631 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 13:03:03 ]
managed C++ とどう違うの?

632 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 13:29:01 ]
>>630
大体あっている
.NET Frameworkを標準規格化した際の名称がCLIとでも思えばいい

>>631
構文がましになった

633 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:39:54 ]
VS2005EEです。
Wktk(void(*func)(void)) というような関数に
クラスメソッド void cKwsk::Osieru()
のポインタを渡したいのですがC2440エラーでうまくいきません。
どのようにキャストすれば良いのですか?

634 名前:デフォルトの名無しさん [2007/05/26(土) 19:44:45 ]
Visual Studio 2005にて、以下のようなコードを書いたのですが

const TCHAR OutBuff[] = _T("D:\\TEST\\アイウエオ.txt\n");
const TCHAR OutFile[] = _T("abc.txt");

_tfopen_s(&fp, OutFile, _T("w+, ccs=UNICODE"));
_fputts(OutBuff, fp);
fclose(fp);

これで出来上がったabc.txtの中身を見ると
D:\TEST\[EOF]

要するにカタカナの「ア」以降出力されません。
これはどうすればうまくいくでしょうか?

環境はVS2005 SP1 WindowsXP SP2
ワイド文字を使用するでコンパイルしています。


635 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:49:39 ]
>>633
そのメンバ関数を静的メンバ関数にすればいい。

636 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:51:15 ]
>>633
キャストできない。
クラスメソッドでない普通の関数を噛ませるか、Wktkの方を変えるしかない。

637 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:52:25 ]
>>634
ロケール

638 名前:634 mailto:sage [2007/05/26(土) 20:13:49 ]
>>637
うまくいきました。ありがとう。

639 名前:633 mailto:sage [2007/05/26(土) 20:56:47 ]
静的メンバ関数にすることで対応しました。
レスありがとうございました。

640 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:13:31 ]
誰だよ
>環境以前にスレ違いなわけだが
みたいな糞逝ったのは



641 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:49:39 ]
atlのT2Wを使うにしても、mbstowcs系を使うにしても
マルチバイトで"あいう"っていうのをワイド文字列strに変換したばあい、
str[0] = "あ", str[1] = "い", str[2] = "う"と言うふうにはならないんです
変換前と変換後で文字列が対応するように変換するにはどうしたらいいでしょう?


642 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:55:05 ]
え?なるだろ?
ならないっていうなら、現状どうなってるんだ?

643 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:55:30 ]
すいません、マルチバイトに変換してましたorz
ちゃんとT2W使った上手く変換できました

644 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 03:37:25 ]
初心者ですが質問にお答えいただけるとうれしいです。
配列に直接機械語を埋めて関数ポインタで実行させたいのですが
よくわかりません。
環境はPentium4、WindowsXP、BorlandC++Compiler。
//ソース
#include <stdio.h>

int main(void)
{
   int (*func)(void);
   const char ch[] = {
      0xb8, 0x45, 0x23, 0x01, 0x00, 0xc3
   };
   func = (int(*)(void))ch;

   printf("%X", (*func)());

   return 0;
}
何かが決定的に間違っているのにちゃんと12345と表示されます。
アセンブリで
mov ax, 123h
ret
と書いてnasmでアセンブルすると
B8 23 01 C3と機械語が吐き出されます。
これをそのままch[]に埋め込んでもエラーで正しく実行されません。
axレジスタって16Bitですよね?なぜか32Bitで補正してやると正しく実行されるんですよね。
きっと、正しくできていると思い込んでいて実際には偶然こうなっただけなのでしょうけど
なぜ、これが出来て、普通にアセンブルして出来た機械語が実行できないのでしょうか?
もしかして、こういう行為自体が土台不可能な話で、今回出来たのはまったくの偶然ということでしょうか?
教えていただけないでしょうか、よろしくお願いします。

645 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 03:58:41 ]
なんで初心者なのにhackのマネ事してるんだ

646 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:28:36 ]
>>644
C++言語の範疇を逸脱した内容なのでスレ違い。
アセンブラ関連のスレへどうぞ。

647 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:36:01 ]
masm系ならuse32

648 名前:644 mailto:sage [2007/05/27(日) 04:37:26 ]
>>645
hackといわれてもよくわかりませんが
ただ、興味があったとしか申し上げられません。

>>646
こちらC言語です。どうぞ。
失礼。そうですね。ただCでこういうことが可能かどうかを知りたかっただけでして。
出来るか出来ないかだけでも教えて頂きたいと思っているのです。
あとはアセンブリでも機械語でも自分で調べて何とかしますので。

649 名前:デフォルトの名無しさん [2007/05/27(日) 06:09:24 ]
すいませんPGMファイルの読み込みの関数を作っているのですが、
im[j][i]=tempのところで落ちます。どうすればいいですか?おしえてください。
/*-------------------------------------------------------
PGMファイルの読み込みの関数
--------------------------------------------------------*/
int** read_PGM( FILE *fp, int *pw, int *ph){


int **im;

int i, j;
int temp, bright;


printf ("PGMの読み込み開始\n");

/*----------------------
P2形式のファイルか判別
-----------------------*/

if ( fgetc(fp) != 'P' || fgetc(fp) != '2' ){

printf("このデータはP2形式PGMファイルではありません。\n");
return (NULL);

}




650 名前:デフォルトの名無しさん [2007/05/27(日) 06:10:50 ]
/*----------------------
幅のデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", pw) != 1 ){

printf ("幅の読み込みに失敗しました。\n");
return (NULL);

}

printf("幅のサイズは%dです。\n", *pw );


/*----------------------
高さのデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", ph) != 1 ){

printf("高さの読み込みに失敗しました。\n");
return(NULL);

}

printf("高さのサイズは%dです。\n", *ph );







651 名前:デフォルトの名無しさん [2007/05/27(日) 06:12:24 ]
/*-----------------------
輝度のデータの読み込み
-----------------------*/

if ( fscanf(fp, "%d", &bright ) != 1 ){

printf("最大輝度値の読み込みに失敗しました。\n");
return(NULL);

}

if ( bright != MAXVALUE ){

printf("最大輝度値が%dではありません。\n", MAXVALUE );
return(NULL);

}

printf("最大輝度値は%dです。\n", bright );


/*------------------------
ヘッダーの取得完了
------------------------*/

printf("ヘッダーの取得完了\n");





652 名前:デフォルトの名無しさん [2007/05/27(日) 06:14:21 ]
/*----------------------------
メモリの確保
----------------------------*/
if ( (im = (int**)malloc(sizeof(int*) * (*ph))) == NULL ) {

printf("メモリが確保できません。\n");
return (NULL);

for ( j=0; j< *ph; j++){

if( (im[j] = (int*)malloc( sizeof(int) * (*pw) )) ==NULL ){

printf("メモリを確保できません。\n");
return(NULL);

}

}

}


printf("メモリ領域が確保できました。\n");




653 名前:デフォルトの名無しさん [2007/05/27(日) 06:15:21 ]
/*-----------------------------
画像データの読み込み
-----------------------------*/

for ( j=0; j< *ph; j++ ){
for ( i=0; i< *pw; i++ ){

if ( fscanf(fp,"%d", &temp) != 1 ){

printf("画像データの取得に失敗しました。\n");
return(NULL);

}

im[j][i] = temp;

}
}

return (im);

}


654 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 08:28:39 ]
>>649
・長いソースはアップローダを使ってくれ。
・その画像ファイルにはコメントは含まれていないか?
試しにエディタで開いてみて、コメントがあるようなら削って味噌。
・そもそもなんでlibpgmでも使わないんだ?

>>648
>647でも指摘されているが、CPU側の事情で巧く動かないだけ。
(x86)アセンブラの勉強をすれば容易に解決する問題。

655 名前:644 mailto:sage [2007/05/27(日) 11:15:59 ]
>>654
了解です。
「はじめての」シリーズがアマゾンで評価高かったので見てみようかと思います。
あとは、インラインアセンブラで関数作ってその部分だけバイナリで吐き出させて
再び埋め込んでみるのもいいかもしれないです。
シェルコードの解説サイトにソースがあったので使えそうです。
スレ違いな感じですがいろいろ有難うございます。

656 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 12:40:27 ]
>>649
おそらくポインタ関係でミスってる、てことは分かるでしょ?
>>652 で im != NULL のときどうなるか考えてみ。


657 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 17:46:45 ]
>>644
EAX の上位ビットをクリアすればいけるかも

658 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:09:00 ]
>>644のは ret のC3がeaxレジスタにmovするときの数値で食われてるから
返ってこないんだよ。

659 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:24:25 ]
>>644
IMMが32bitの場合と16bitの場合を区別するために、
mov ax, 0x123
では、0x66, 0xb8, 0x23, 0x01
とプリフィックスを入れる必要があるみたい。

660 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:29:14 ]
まぁ厳密には関数ポインタは他のポインタと互換性があるとは限らないんだけど



661 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:34:14 ]
確かに…
リニアアドレスであればいいかもしれないが、
データセグメントとコードセグメントなんかに分かれてると
普通に呼び出すのは無理そう

OSのセキュリティレベルが上がってくると
またDOSのようにセグメント毎に分かれるかもしれんし

662 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:45:59 ]
>>660
>>661
こういうことをやる場合は16bit/32bit/64bitで分けるのは当然。
逆にそれを分けてしまえば、ポインタのサイズも
セグメントの問題もどうにでもなると思うけど…

663 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:47:20 ]
16bit/32bit/64bitで分けるっていうのは、
CPUの種類の話ね^^

664 名前:649 [2007/05/28(月) 09:22:00 ]
みなさん、ありがとうございます。
無事に動かすことができました。


665 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 10:42:28 ]
クラスのコピーコンストラクタとoperator=って、
実装する処理がまったく同じになることが多いんですけど、
メンバのコピー自体はoperator=だけに書いて、

AAAA::AAAA(const AAAA& rSrc)
{
*this = rSrc;
}

とか書いて処理を合体してしまうことって
やっぱり好ましくないことですか?

666 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 10:55:56 ]
>>665
代入と初期化は異なる演算です。
コピーコンストラクタでは初期化リストで各メンバのコピーコンストラクタを使いましょう。

667 名前:デフォルトの名無しさん mailto:age [2007/05/28(月) 11:33:02 ]
結果:Strike!

char *pszMsg = "Lucky Strike!";
char *pszHit;
[ 問 ];
printf("%s\n,pszHit");

668 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 11:37:50 ]
最後の"はそこでいいのか

669 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 01:31:34 ]
VisualStudio2005でC++をコンパイルした実行ファイルをリバースエンジニアリングできますか?

670 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 01:37:08 ]
はい、できます。



671 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 01:47:07 ]
>>669
君には、できません><

672 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 03:10:42 ]
CLRヘッダが無いと怒られてしまいました。
どうすれば、リバースエンジニアリングできますか?

673 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 03:16:27 ]
リバースエンジニアになればリバースエンジニアリングできます!

674 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 03:20:04 ]
馬鹿にはできない不思議なリバースエンジニアリング

675 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:35:08 ]
逆アセンブラはできるけど、逆コンパイルはできない。

676 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:49:18 ]
× 逆アセンブラ
○ 逆アセンブル

× できない
○ それ的な事はできるけど、元のソースを再現できるわけではない

677 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:07:41 ]
ブーメラン ブーメラン

678 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:13:09 ]
64ビットになったらアセンブラでプログラムなんて無理だよね

679 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:13:48 ]
>>678
なんでやねん?

680 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:14:36 ]
めんどくさくない?



681 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:15:00 ]
>>678
ドラスティックな変化があると思っているなら、不勉強にも程がある。

682 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:26:26 ]
eax とかが rax とかになるだけだろ。

683 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:30:51 ]
歳も歳だし、新しく勉強なんてもう俺には無理だよorz
16ビットが恋しい

684 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 21:14:53 ]
逆アセでollydbg使ってる奴はいないのか?

685 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 21:49:24 ]
なんだよ

686 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 22:59:51 ]
16ビットなら人間の手足で数えられるんだな

687 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:39:43 ]
つーか16ビットの方がめんどうだっだろ

688 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:42:06 ]
だっだろ

689 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 08:45:31 ]
だっだろだっだろ

690 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 10:24:56 ]
リスクは面倒だっだ



691 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 12:59:59 ]
フリスクはよかった

692 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 13:12:08 ]
ロリスクってなんですか?ハァハァ

693 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 13:24:56 ]
ローリスクっぽい言葉の響きなのに凄くハイリスクな感じがするな。

694 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 13:27:09 ]
>>693
っ ■■■(座布団)

695 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:02:25 ]
なんら意味のないプログラム

void add(int)
int main(void){
add(2);
return 0;
}

void add(int x){
x=x+1;
}

これ、main関数の中のadd(2)が実行された時点で、
内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。

main関数の中に
2=2+1;
ってやったらエラーが出て実行できない。

これはなぜ?教えてください

696 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:06:43 ]
>>695
関数へはコピー渡しだからaddを呼んだ時点で2が変数xにコピーされている。
void add(int& x) だとコンパイルエラーにならないか?

697 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:06:58 ]
意味がないなら、どうでもいいじゃないか。( ´∀`)

>内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。
C/C++ では、引数は値渡しなので
add() 内部で x という変数が 2 になっているだけ。
add() を抜けると、+1 したはずの x は消滅。

698 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:08:10 ]
おいおいw

699 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:09:56 ]
↑誤爆スマソ

700 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:11:53 ]
↓自爆スマソ



701 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 15:12:26 ]
>>695
そのx=x+1;での=は、数学の授業でやるような等しいという状態を表しているものではなく、
「代入しろ」という動作の命令なのよ。

代入しろという命令だから=の左には代入できるものを書かないとエラー。
だからx=x+1;はokで2=2+1;はエラーになる。

702 名前:デフォルトの名無しさん mailto:age [2007/05/30(水) 22:14:02 ]
CかC++で、整数型のユニークなIDを作るような機能を持ったライブラリってありませんか?

703 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 22:27:11 ]
>>702
uuid

704 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 22:32:30 ]
用途が分からんと何とも言えない気がする。

705 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:14:46 ]
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
id++;
return id;
}

706 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:47:21 ]
スレッドセーフじゃないな。

707 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:51:39 ]
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
static int locked=0;

while(locked) msleep(1);
locked=1;
id++;
locked=0;
return id;
}

ミューテックス使わなきゃ駄目?

708 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:06:39 ]
当然なんらかの同期化機構を利用しないとダメ。
スレッドAがwhile(locked)で
"lockedの値をレジスタに取った直後に" スレッドが切り替わり
スレッドBが同様にwhile(locked)を実行したらどうなる?

あと、そのコードはstatic変数の初期化も下手すると二回以上行われるね。

709 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:08:51 ]
いや、、、初期化は実行時じゃ無いぞ・・・
クリティカルセクションでいいな

710 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:17:29 ]
ごめん。C++のつもりで書いてたわ…。



711 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:42:27 ]
最適化でゴッソリ消える予感

712 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:50:34 ]
synchronized

713 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 02:12:57 ]
C++ にあればねえ

714 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 02:16:48 ]
>>711
その点については volatile つけとけばおk

715 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 06:43:11 ]
そういう問題じゃないけどまぁいいか。

716 名前:デフォルトの名無しさん [2007/05/31(木) 08:42:34 ]
すいません、この関数って何か間違ってますか?
hairetsu2は、メモリ領域が確保してあり、srand()も関数の外で処理しています。
hairetsu2[j][i] = rand()%2のところで止まります。お願いします。
void rand_point( int **hairetsu2, int row, int line ){

int i, j;

/*** 2次配列の0or1をランダムに格納する ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){

hairetsu2[j][i] = (rand()%2);

}
}

printf("2次配列にランダムに0or1を格納できました。\n");

}

717 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:06:05 ]
>hairetsu2は、メモリ領域が確保してあり、
どうせちゃんと確保してないに決まってる

718 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:06:36 ]
「止まります」?そもそもコンパイル通らんだろ。

719 名前:デフォルトの名無しさん [2007/05/31(木) 09:25:24 ]
コンパイルは通るんですよ↓メモリ確保は、次の関数で確保してます。
void securement2( int **hairetsu2 , int row , int line ){

int i, j;
/*** 2次配列の行を確保する ***/
if (( hairetsu2 = (int **)malloc( sizeof( int* ) * row )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}
/*** 各行に得点の列を確保する ***/
for ( j=0; j<(row); j++){
if (( hairetsu2[j] = (int*)malloc( sizeof(int) * (1+line) )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}

/*** 2次配列を0で初期化 ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){
hairetsu2[j][i] = 0;
}
}
printf("2次配列のメモリ領域が確保できました。\n");
}


720 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:30:00 ]
>>718
根拠は?

>>717
同意。

>>716
その構造だと、メモリはとint配列[line + 1]をrow回とポインタ配列[row]だけ確保する必要があるわけだが。
その部分のコードを晒して味噌。



721 名前:デフォルトの名無しさん [2007/05/31(木) 09:30:21 ]
hairetsu2[0][0]だけが格納されて止まるみたいです。hairetsu2[1][1]も格納できないみたいです。


722 名前:720 mailto:sage [2007/05/31(木) 09:32:01 ]
>>719
あーすまん、やってたのね。
で、止まるってのは具体的にどうなると?

723 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:32:23 ]
>>719
確かにメモリ確保はできてるようだけど、
hairetsu2 をそのまま使うことは出来ない。
変数 hairetsu2 は関数 securement2 を終えた時点で使用不能

724 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:33:06 ]
void securement2( int **hairetsu2 , int row , int line ){

void securement2( int ***hairetsu2 , int row , int line ){

または

void securement2( int **hairetsu2 , int row , int line ){

int **securement2( int row , int line ){
int **hairetsu2;

printf("2次配列のメモリ領域が確保できました。\n");

printf("2次配列のメモリ領域が確保できました。\n");
return hairetsu2;

725 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:44:15 ]
2次元配列も連続した領域である必要があるんだよ。
その配列のアクセスの仕方をやめるか、メモリ確保を一回でやるかどっちかにせい

726 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:45:30 ]
>>725
ちょ…おまw

727 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 10:29:04 ]
素朴な疑問だが、>>719みたいな奴って「2次元配列」言うの?
確かに同じ形で操作出来た気はするが。

>>725
何に対するレスか非常に疑問。

728 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 10:36:01 ]
可変長二次元ぬるぽ( ´∀`)

729 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 11:31:48 ]
>>727
配列のポインタの配列。

730 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 11:47:39 ]
ttp://www.kouno.jp/home/c_faq/c6.html



731 名前:デフォルトの名無しさん [2007/05/31(木) 12:37:24 ]
windows98で
SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS);
は実行できますか?
実行するとどうなりますか?

732 名前:649 [2007/05/31(木) 13:10:14 ]
716です。ありがとうございます。ちょっと試してみます。


733 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 13:37:36 ]
>>731
MSDN読め

734 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 15:43:09 ]
>>716はダブルポインタ理解してるか?
引数にint **hairetsu2って書いてあるが、ここでダブルポインタにする必要はなにもない。
引数をダブルポインタにするには、関数内でメモリを確保して返すような場合だけだ。
ダブルポインタ=二次元配列じゃないぞ。配列は何次元になってもメモリ内の表現は連続だ。

あとrowとlineは普通どっちも行を意味する。
rowを行とするなら、列の変数名はcolumnの方がいい。

735 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:38:07 ]
>>707
Windows APIのInterlockedIncrementのような関数が使えれば、それを使うのが楽

736 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:52:17 ]
ダブルポインタってなに?

737 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:58:01 ]
1点決めると2点分になる人

738 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:58:22 ]
配列の連続性だけど、
a[3][3] で a[0][2] と a[1][0] の連続性って規格で保証されてたっけ?

739 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 18:00:11 ]
int**がダブルポインタならこれは何ポインタ?
int*************** nullpo;

740 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 18:07:56 ]
pentadecuple



741 名前:デフォルトの名無しさん [2007/05/31(木) 18:47:40 ]
>>733
読みました。2000以降と書いてありますが、98でどうなるかは書いていません。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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