[表示 : 全て 最新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


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