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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/

29 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:26:39 ]
俺ならstd::vectorではなくstd::setを使う。
intなら比較関数オブジェクトを与える必要もなく、
rendからイテレータで舐めることで、ソート順をひっくり返す。

30 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:20:53 ]
うへぇ、確かにこの場合はそっちの方が楽そうだ

31 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:24:29 ]
rendではなくrbegin()な。

32 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 01:53:30 ]
これができたらC++について基本は押さえてるという基準になる課題とかないですかね?

33 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 02:46:12 ]
>>32
「Exceptional C++」という本の47の問題に適切な回答ができたら

ってのはどうよ。

34 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 04:32:11 ]
いやです。

35 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:35:37 ]
>>33
ありがとうございます。
その本チェックしてみますね。

36 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:20:18 ]
template <class T> void Show( T &data )
{
std::cout << data << std::endl;
}

この関数に引数としてunsigned charを入れると
文字として出力されてしまうのですが
なんとか数値として出力できないでしょうか?

int や doubleもこの関数を使うので表示するときにキャストは使えません。

ちなみにほんとの関数では配列をぶち込むので
関数に渡すときにキャストしたりもできません。

37 名前:デフォルトの名無しさん [2007/08/31(金) 19:48:05 ]
>>36
呼ぶときにキャストしたら?



38 名前:36 mailto:sage [2007/08/31(金) 19:56:31 ]
すまん。最後まで読む前に書いてしまった。
これでどうでしょう?
#include <iostream>
template <class T> void Show( T &data )
{
std::cout << data << std::endl;
}
template <> void Show( unsigned char &data )
{
std::cout << static_cast<int>(data) << std::endl;
}
int main(){
unsigned char a='a';
int b=3;
double c= 3.1;
Show(a);
Show(b);
Show(c);
}


39 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 20:07:29 ]
自己レスかよ

40 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:07:04 ]
以下のコード、VC++6.0では通るのにVC++2005では
error C2597: 静的でないメンバ 'TTest::axx' への参照が正しくありません。
というエラーが出てしまいます。なぜでしょうか?お助けあれ

struct TTest
{
int axx;
};
strict TParamItem
{
int TTest::* p;
int x;
};
class T2 : public TTest
{
public:
static const TParamItem KParamTable[];
};
const TParamItem T2::KParamTable[] = { { &axx, 10 } };

int _tmain(int argc, _TCHAR* argv[])
{
T2 t1;
t1.axx = 150;

printf("%d %s\n", t1.*(KParamTable[0].p), "test");
return 0;
}

41 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:18:26 ]
>>40
&TTest::axxと書けばいいはず。
VC++ 2005では規格への準拠度が上がって、
メンバへのポインタの取得に標準から外れる書き方を認めなくなった。

42 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:07:59 ]
>>41
できました…本当にありがとう!

43 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:07:46 ]
え?
staticなメンバ関数から、staticではないメンバ変数にアクセスすんな!
ってことでしょう。


44 名前:デフォルトの名無しさん [2007/09/01(土) 01:51:15 ]
あるプログラムの実行処理を速くしたいとき、どのようなことに
気をつけてコーディングすべきでしょうか?
アルゴリズム?メモリ管理?。
非常にアバウトな質問ですが教えていただけたらと思います。
みなさんはどのように意識して処理速度パフォーマンスを
向上されているのでしょうか。
もしも何か参考図書があったら教えてください。
Efficient C++を読みましたが、クラスの生成に気をつけることが
重点的に書かれていたような気がしました。

45 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:54:20 ]
気がしました。

46 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:55:49 ]
>>44
先ずは、動作の安定したしっかりしたプログラムを作ること。
勿論それは、速度向上のために今後修正されるのだからそれを考慮して読みやすく誤解の少ないものであるべき。
後は、適当なリビジョン管理ツールと速度評価ツールを用意し、格闘するだけだな。

47 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:57:38 ]
と書かれていたような気がしました。



48 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 02:38:14 ]
>>44
すでにあるプログラムの速度を改善したいのか
それとも
これから書くプログラムを速くしたいのか

速くしたいのはどれくらいか、
数割なのか、それとも桁違いなのか

それによって答えは違ってくるよ。


49 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 02:42:29 ]
と書かれていたような気がしました。

50 名前:44 [2007/09/01(土) 09:52:47 ]
みなさんおはようございます。
すでにあるプログラムの速度を改善したいと思っております。
速くしたいのはどれだけ、というのは難しくとにかくできるだけ
処理時間を短くしたいと思います。

そのようなコーディングの”コツ”を未熟ながらわかっておりません。
ですので、相談させていただきました。

51 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 09:58:26 ]
まずはプロファイラで何回も実行される部分を見付ける。
そこが最も実行時間上ネックになっているところだから、
そこを重点的に高速化する。80:20の法則。

52 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:23:55 ]
>>51
最初は、実行回数よりも、実行時間の合計が大きな関数を見つけるほうがいいと思う。
ミクロな最適化して速度を稼ぐのは、後からでもいい。


53 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:33:26 ]
>>52
うるせーバ〜カ

54 名前:48 mailto:sage [2007/09/01(土) 10:40:57 ]
>>50
> 速くしたいのはどれだけ、というのは難しくとにかくできるだけ

達成すべき目標が与えられていないのなら、現状を目標にしてしまえ。
何もしなくても目標達成だ。おめでとう。

「とにかくできるだけ」つまり速度無限大が目標なら、
それを実現するためのコストも無限大が必要だ。
ということは、
自分でやらないで金を出してプロを雇ったほうがいい。

まぁいいや、桁違いに速くしたい、ということだと解釈しよう。

処理時間の大半を占めている部分について、
データ量Nに対して処理のオーダーがNのX乗になっている部分を探し、
よりオーダーの小さいアルゴリズムに変更する。
下手なプログラムなら、これで桁違いに速くなる。

55 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:41:52 ]
>>53
心が寂しいんだね。同情するよ。

56 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:53:11 ]
>>55
同情するな金をくれ!

57 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:56:55 ]
>>56
同情ってことは、俺も心が寂しいってことだ。
だから金はやれない。

あの安達祐実のセリフは日本語として間違っている。
「同情するなら〜」ではなく、「哀れむなら〜」のほうが意味としては適切かと。インパクトないけどね。



58 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 11:06:12 ]
もう少し日本語を勉強したほうが良いと思うよ・・・

59 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 17:44:33 ]
gcc -O2 hoge.c

60 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 11:33:14 ]
まあ、この書き込みもみたくねぇって言われるのは承知の上で、

なんでここ、IDでないの?
こんなウザイ書き込みIDNGワードにしてしまいたい。

61 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 11:39:07 ]
>>60
死ね

62 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:00:16 ]
たった一言で誰だか分かってしまうこのクォリティw

63 名前:44 [2007/09/04(火) 00:45:27 ]
返事がすごく遅れて申し訳ありません。アドバイスありがとうございます。

>データ量Nに対して処理のオーダーがNのX乗になっている部分を探し、
>よりオーダーの小さいアルゴリズムに変更する。
オーダーがNのX乗になる部分の探し方がわからないです。
まずはぐぐってみます。

そして、実行時間、実行回数が多い関数を探し出し(プロファイル使用。
使用したことはないのですが・・・)、その部分のより適した
計算方法を検討することを行ってみます。

大体このような流れでみなさんも処理時間の短縮を図っているのでしょうか?



64 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 00:56:30 ]
わかりやすいボトルネックは二重ループしてるところとかかな。
でもループ内から呼び出した関数の中で別のループをしてるような一見わかりにくいものもある。
ま、プロファイラを使えば簡単に見つかるだろうけど。

65 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 03:04:58 ]
>>63
> オーダーがNのX乗になる部分の探し方がわからないです。

データ量Nを10倍にしてみて、実行時間が100倍になれば2乗、1000倍になれば3乗。


66 名前:65 mailto:sage [2007/09/04(火) 03:08:06 ]
言葉が足りなかったかも。

プログラムを見て探すのではなく、
実際にプログラムを走らせてみて、
実行時間の変化を見るのです。

10倍だと極端かもしれません。
2倍とか3倍とか適当に試して。


67 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 05:00:10 ]
C++の演算子の
.*
->*
は、どういう時に、どのように使うものなのですか?



68 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 05:18:11 ]
(構造体).(構造体のメンバ)
(構造体へのポインタ)->(構造体のメンバ)

69 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 07:47:22 ]
メンバポインタのようにも見える
→ *

70 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 12:43:16 ]
メンバポインタだな

X x, *p;
int X::*m;
というのがあったとき、

x.*m = 1;
p->*m = 2;
このように使う

71 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:53:45 ]
クラスのメンバに、
自分自身を破棄してメモリを解放する関数って作れるのでしょうか?
例えばこんな感じです。

void destroy(){
DELETE(this);//インスタンスを破棄してメモリ解放する関数
}

72 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:56:10 ]
そうすると静的に作ったインスタンスの扱いはどうなるの?
インスタンスが有効かどうかを保持するフラグをメンバ変数に持たせておく、
ぐらいの解決方法が一番な気がする。

73 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:56:36 ]
delete this;

当然newしたものである必要がある。

74 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:08:48 ]
newで作ってないインスタンスはdeleteで消せないんですね。

Javaしかやったことがないので、メモリ解放がイマイチ馴染まず、
できるだけ意識せず簡単に消せる作りにしたいんです。
メソッドのスコープ抜けたり、参照外れたりしたら、
勝手に解放されるとかいう風に作るのは無理でしょうか。

75 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:15:31 ]
つ[スマートポインタ]

76 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:22:07 ]
>>74
そもそもnewする必要がないものをわざわざnewして作ることもないと思うが。

77 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:23:59 ]
>>75
stdっていうのが無いので使えませんたぶん…
>>76
もしかしてnewで作らなければ、メソッドのスコープ抜けたとき勝手に破棄されるんでしょうか。



78 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:25:26 ]
>>77
される(それはJavaと同じ)。
てか、まずは試してみたらどうだろう?

79 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:27:27 ]
スタックとヒープの区別すらついていないとは…まるで知性を感じませんよ

newで作ったやつ…関数抜けても消えない。ヒープに取るから
ローカル変数…関数抜けたら消える。以降は使用不可


80 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:33:04 ]
スタックとヒープなんとなく違いが分かりました。
確かに知識不足ですね。まだ始めたばかりなんで勉強してみます。

81 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 07:06:58 ]
>>77
ないならば、用意すればいい。

テンプレートが使えるコンパイラなら、
boost::scoped_ptrやboost::shared_ptrが使える。
もちろん外部のライブラリ使用禁止なら、
適当に名前空間を変えて自己責任で使えばいい。
そんなに複雑なものでもないし。

82 名前:67 mailto:sage [2007/09/05(水) 08:31:06 ]
>>69-70
ありがとうございます。

これはエグい機能ですね。
どうりで今まで使いみちが理解できなかったわけです。

これを使うべき場面というのはあるのでしょうか。


83 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 09:11:26 ]
>>71
C++に不慣れなうちは、delete this するようなクラスを作るのは、やめたほうがいいと思う。
なぜなら、delete this は、どうしてもそれが必要な特別な場合だけに限定すべきだから。

どうして、自分自身を破棄するようなメンバ関数が必要なの?
もっと適切で良い方法を教えられるかも。

84 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 10:45:08 ]
>>82
メンバ関数ポインタ でぐぐると使用例がいくつかヒットするかもしれない。
まぁでも滅多に使うもんじゃない。

85 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:21:37 ]
直接メンバへのポインタには触れないけど、
mem_fun(やboost::bind)の中で使っているんだろうなとは思う。

86 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:29:14 ]
>>83はもしかしからデストラクタを呼びたいのかも。


87 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:30:20 ]
>>83じゃねえや>>71だな。



88 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:10:16 ]
関数の引数で、
読み取りのみで変更を行わないものは、

void hoge(const Type& o) ;
void hoge(const Type* p) ;

どう使い分けるべきなのでしょうか。

89 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:19:56 ]
常に前者。

ただし、配列の要素を指すポインタを受け取るのであれば、
要素数を示す引数を追加した上で、ポインタを使う。
しかし、イテレータで済むならそっちを使う。

90 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 15:59:14 ]
なぜポインタではなく参照を使うのでしょうか。


91 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 16:04:27 ]
void hoge(const Type& o) ;
だったら引数にNULLを設定した場合、コンパイル時にエラーが分かるから。

ついでに
void hoge(const Type* o) ;
だと常にNULLチェックが必要、そうしないと実行時にどんなエラーが起こるやら。

ちなみにNULLがありえる場合は後者を使う。

ちなみに、ここでいうNULLとは
Type* p = NULL; hoge(p);
のことではなく
hoge(NULL);
のことですぅ。念のため補足




92 名前:デフォルトの名無しさん [2007/09/08(土) 16:58:52 ]
C++で色々なプログラムを作りそのときの考え方を示し
実際にどのようにして作るのか解説してくれる本はありませんか?

93 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 17:25:48 ]
88です。

ポインタの安全ではない部分を解決するために、C++で参照が導入されたのだから、
参照を使ったほうがいい、ということですね。

94 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:30:37 ]
>>91
NULLで参照がエラーになるのはNULLだからじゃなくて型が違うからだろ。

95 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:14:54 ]
>>94
>>91はそういう話をしている。何も間違ってない。

96 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:46:04 ]
>>95
>>91の書き方はからは読み取れない。
補足も意味不明。

97 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:51:34 ]
日本語でおk



98 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:55:28 ]
>>97
日本語じゃなくてC++が分かってないんだろ。

99 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:00:32 ]
何や此奴俺初めて書き込んだのに

100 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:03:39 ]
91の言いたいことはわかるが、
説明がいまいちだったな。

101 名前:デフォルトの名無しさん [2007/09/09(日) 02:23:37 ]
94の言いたいことはわからないし、
人としていまいちだったな。

102 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:29:00 ]
>>91 のポインタだと常にNULLチェックが必要ってのも素人くさいな。

103 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:32:35 ]
>>102
まぁその辺は宗教入って来る話な気もするし、無しにしようや。

104 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:32:52 ]
>>91
補足は、hoge(p); でなくて、hoge(*p); だよな。

hoge(p);とhoge(NULL); なら、どっちも参照ならエラーだし、ポインタならエラーにならないし。


105 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:45:13 ]
>>103
宗教って言うと「常にNULLチェックする」ほうにも理があるみたいじゃん。

106 名前:デフォルトの名無しさん [2007/09/09(日) 04:51:23 ]
今BCCを使ってC言語の勉強をしていますが何かアプリケーションを作製したいときってどんなソフトがいりますか?

107 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 04:52:58 ]
>>106
VisualC++



108 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 04:54:27 ]
>>107 ありがとうございます!

109 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 07:18:46 ]
>>106
107は、あなたをからかっている。

BCCでもアプリケーションは作れるが、
便利で強力な道具を使えば手間が省けるというもの。

どのようなアプリケーションを作りたいの?

110 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 07:44:59 ]
>>109 メーラーです。複雑な機能は抜きとしてメールサーバーからメールを取ってくるというものです

111 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 07:58:30 ]
GUIとCUIどっち?

112 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 08:02:49 ]
GUIです。最低限の機能としてメール受信送信それと閲覧ができれば。

113 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 08:21:34 ]
じゃぁ、C++Builder


114 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:35:15 ]
>>112
何故作りたいの?
一発で巧く動くものが作れればいいけどそうでなければメールサーバに迷惑を掛けることにもなりかねないし、
何より便利なメールソフトが腐るほどあるのに。

115 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:37:33 ]
>メールサーバに迷惑を掛けることにもなりかねない

ここには同意だが、なぜそんなにもやってみようという気持ちをくじくようなことを言うのか。

116 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:57:01 ]
どうせやるなら、そこらに無いものを作ろうよ。


117 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:57:54 ]
>>114
言語の話とはズレるけど、メールサーバを自分で立てるという発想は無いのか?



118 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 10:05:25 ]
>>105
ある。
例えばバグの早期発見と原因分析に役立つ。

119 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 10:34:43 ]
NULLポインタに何か意味があるならともかく、
そうでないなら、
NULLチェックなんてするとバグを見落とすことになる。

デバッグ中は、
NULLチェックせずに例外で落ちたほうがマシだと思うよ。

120 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 10:53:18 ]
>>119
そういうのを含めてNULLチェックというんでないの?
NULLに対し何らかの処理が必要という意味で

121 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 10:56:34 ]
>>104
Type* p = NULL;
のあとに*pとかやったら関数とか関係なく落ちるだろ…それもコンパイル時には分からん品

122 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 11:20:55 ]
>>120
ふつ〜NULLチェックといったら、
NULLでないことを確認してからポインタの指す先を触り、NULLの場合はエラーとしてfalseを返す
だろう。

正しくエラー処理していて堅牢に見えるけど、かえって、バグを抱えたまま、それらしく動いたりするのよ。

123 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 11:25:27 ]
>>119
例外で落ちるってWindowsのメモリアクセス違反例外のこと?
さておき。

単にセグメンテーションフォルトされたら、
落ちた位置とか原因とか分かり辛くなるじゃん。
現象が再現するとも限らないし、
テスト環境に開発環境があるとも限らないし。

異常発生後も動くのが嫌ならNULLチェックで
例外投げるなりexit()するようにしたら良いよ。
少なくともログ出せない落ち方よりログ出せる落ち方のが良いと思う。


そいえば。
Linuxとかでcore吐いてたら、まだコールスタックやら拾えるかなぁ。
VCとかにもそういうのあるの?

124 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 11:52:27 ]
>>123
Windows限定ではないけど、いまどきのリッチな環境向けのOSなら、
NULLポインタの指す先にアクセスしたら、OSが待ったをかけてくれると思う。
メモリ保護がないハードとかは・・・別の話にしてほしい。

Windowsローカルの話だと、Dr.ワトソンというログ記録ツールが、OS標準搭載されてる。
メモリアクセス違反をやらかした場所のコードを逆アセンブルし、レジスタとスタックの状態を
テキストファイルで保存してくれる。設定でプロセスのメモリイメージのダンプも可能。
下手にハンドルして貴重な情報をログに残さず捨ててしまうくらいなら、これを使ったほうがいい。

まぁ普通は、開発環境が入っているPCでテストしている最中に問題を見つけるし、
逆に言うと、その段階で問題を見つけられるようにテストすべきだから、
メモリアクセス違反をやらかしたらデバッガをアタッチすることになるかと。

自分は使うに至ったことないけど、リモートデバッグもできるとのこと。
これなら、リモートデバッグ用のエージェントだけをターゲットマシンに
インストールすればいいので軽い。

125 名前:124 mailto:sage [2007/09/09(日) 12:04:27 ]
捕捉

逆アセンブルされたコードを見ても、C/C++のソースの該当箇所がわからないとダメなので、
コンパイルするときに、ソースコード付きでリスティングファイルを出力
リンクするときに、mapファイルを出力
んでもって、これらを生成されたバイナリとセットでしっかり管理する。


126 名前:デフォルトの名無しさん [2007/09/09(日) 12:44:44 ]
データへのポインタpDataを取得する関数が、
こんな感じで定義されているのですが、
long GetData( void*& pData )
「*」と「&」が並んでいるところのわけがわかりません。
void*& pDataのところは「*」がpDataのポインタをさしていて、
「&」はその参照を受け取る、というようなことなんでしょうか。
自分の持っている初心者向けの参考書には「参照には*をつける必要はない」と
書いているのですが…。

127 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:57:45 ]
int &x
bool &y
void* &pData



128 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:59:01 ]
>>126
たとえば、
typedef void* VOID_PTR ;
としたならば、
long GetData(VOID_PTR& pData )
と同等。

仮に参照を使わなければ、
long GetData(VOID_PTR* ppData )
long GetData(void** ppData )
かな。

129 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:32:38 ]
"voidポインタ"型の参照 と思え
それがよくわかるように>>127みたいに書くのを俺はすすめる
(int* a, b; ってできないから困るが。)






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

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

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