- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 730 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:31:29 ]
- >>727>>729
本気でそんなプログラミングしているのか? 桑原桑原。
- 731 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:39:44 ]
- >>730
桑原桑原。
- 732 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 07:07:12 ]
- w[k][i] = i&1 ? -1 : 1;
を提案します(ぉ
- 733 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 07:07:59 ]
- lだった…orz
- 734 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 10:40:58 ]
- >>729
int v = 1; for(k=0;k<3;k++) { for(l=0;l<3;l++) { w[k][l] = v * -1; } } のほうがすっきり。
- 735 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 10:55:06 ]
- >>734
9つ全部-1にならない?
- 736 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:18:23 ]
- ここのつ、とう!
はい、よくできました♪
- 737 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:20:12 ]
- ??
- 738 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:49:07 ]
- !!
- 739 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:50:44 ]
- 3×3の行列の初期化くらいなら、
いちいちfor文で回したりせず、 double w[3][3] = { {-1.0, 0.0, 1.0}, {-1.0, 0.0, 1.0}, {-1.0, 0.0, 1.0} } これでいいじゃないか。
- 740 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:58:06 ]
- 例として3×3にしてるだけで、
実際はもっと大きいんじゃないのかな?
- 741 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:26:55 ]
- えー
for(k=0;k<3;k++) のように、ハードコーディングしてるじゃん。 もし巨大だったり、任意のサイズだったら、そういうコードになるべ?
- 742 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:33:55 ]
- ていうかさ、
行列の問題なのか、 数列の生成の問題なのか、 切り分けてから質問してほしい。
- 743 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:57:18 ]
- 全角数字使うなカス
- 744 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:49:04 ]
- 揚げ足取り乙
- 745 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:52:32 ]
- 揚げ足ってレベルじゃねぇぞカス
- 746 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:38:47 ]
- カスは自分のことを棚に上げる傾向にあります。
- 747 名前:デフォルトの名無しさん [2007/08/06(月) 21:24:19 ]
-
スレ違いだったらすいません。 アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。 当方所有のウェブアプリケーションソフト (以前プログラマに依頼して作ってもらったものですが今は連絡が取れません) がURL先の変更?で突然使えなくなってしまいました。 そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか? 当方、全くの知識不足で言語が C++ということ以外分かりません。 ソースファイルは持っております。料金は2万円でお願いします! seishinkeiki@hotmail.co.jp
- 748 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:27:03 ]
- 本日中ってあと2時間半しかないぞ
- 749 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:28:22 ]
- バイナリエディタで書き換えたら使える
- 750 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:31:03 ]
- マルチすると来る人が居なくなるかもよ
- 751 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:32:25 ]
- マルチすると釣られる人が居なくなるよ
- 752 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:46:42 ]
- >>747
2万じゃ安いな・・8万でどうだ?
- 753 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:47:59 ]
- ちゃんと引継ぎしとけよ・・・
- 754 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:48:45 ]
- >(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
待遇悪くて逃げられたんか?
- 755 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:08:57 ]
- >>747
解析料が必要です。弊社なら50万円で納期2週間で考えてみましょう。 プログラムのソースによって見積もりのさじ加減はかなり違います。
- 756 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:13:25 ]
- 2万とか・・・どんだけ買い叩いてんだよ
- 757 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:14:45 ]
- ローカルにプロクシ立てるとかすれば何もいじらずに済むんじゃね?
- 758 名前:デフォルトの名無しさん [2007/08/07(火) 01:09:59 ]
- 多重ループを一気に抜ける方法って、いちいちbreak文つけるか、gotoしかないんですか?
例えば、swtich文の中のif文で、break文以外の処理も行いたい時、 同じif文を二回書くことになるので、なんか無駄に長くなってしまうのですがorz
- 759 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 01:11:53 ]
- gotoつかやいいじゃん。
- 760 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:12:19 ]
- もうひとつある
そのループを別の関数に分離してreturn
- 761 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:22:37 ]
- 賛否あるが、throwってのもある。
- 762 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:46:58 ]
- つか、何の言語?
- 763 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:36:16 ]
- スレを勃てるまでもないC/C++の質問はここで 2
- 764 名前:762 mailto:sage [2007/08/07(火) 09:25:29 ]
- うぁ、すれ立てるまでもない質問はここでスレだと思ってた!
- 765 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:06:26 ]
- (*´д`)σ))Д`)
- 766 名前:デフォルトの名無しさん [2007/08/07(火) 15:07:36 ]
- 棒倒し法で迷路を自動生成するプログラムを作ろうとしているんですが、すべての棒が同じ方向に倒れます。
下が棒を倒す部分の関数なんですが、どこが間違ってるのか教えてください。 void KnockDown(){ int i,j; for(j=2;j<19;j+=2){ for(i=2;i<19;i+=2){ srand( (unsigned int)time(NULL) ); switch (rand()%4){ case 0:// 北 if(maze[i][j-1]!=0) maze[i][j-1]=0; break; case 1:// 東 if(maze[i+1][j]!=0) maze[i+1][j]=0; break; case 2:// 南 if(maze[i][j+1]!=0) maze[i][j+1]=0; break; case 3:// 西 if(maze[i-1][j]!=0) maze[i-1][j]=0; break; } }} }
- 767 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:11:43 ]
- >>766
srand()は最初に呼ぶだけにしよう。
- 768 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:11:45 ]
- 質問なのですが
動画にマイクで声をつけるのはどうやってやるんですか? 後、動画の編集の仕方も教えてください よろしくおねがいします
- 769 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:14:09 ]
- 板 違 い
- 770 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:21:32 ]
- >>766
0が壁で0以外が通路?何か違和感あるなw あと、ランダムで決定したところにすでに壁ができていた場合どうなると思う?
- 771 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:07:05 ]
- 質問です。
ウインドウズでメモリーリークを知るには_CrtDumpMemoryLeaks()を使いますが、 メモリースマッシュを知るにはどうすればいいのでしょうか? ##二重開放とかそういうことです。
- 772 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:54:14 ]
- >>766
一つ言わせてくれ。 質問する前に2つのことをすべし。 1. デバッガでステップ実行する。変数の値の中身も見ること。 2. 問題を切り分ける。 あなたの問題は、 すべての棒が同じ方向に倒れる のではなく、 rand()%4が同じ値になる でしょうに。
- 773 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:05:37 ]
- >>771
二重解放なら、 デバッグビルドをデバッガ上で走らせていれば、 デバッガのトレース出力にメッセージが出たと思う。 とりあえず、 _CrtSetDbgFlagで_CRTDBG_DELAY-_FREE_MEM_DFと_CRTDBG_CHECK-_ALWAYS_DFをオンにして、 わざと二重解放してみよう。 オーバーヘッドが多き過ぎるなら、 _CRTDBG_CHECK-_ALWAYS_DFはオフにして、 自分で_CrtCheckMemoryを呼ぶ。 _CrtSetAllocHookを使って、自分でチェックするのも手。
- 774 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:54:33 ]
- >>773
レスサンクス!! デバッガが警告出してくれるっぽいですねぇ。 コレで安心してメモリ確保ができるってもんです。 当方、趣味グラマの初心者なのでメモリ確保が苦手なのです。 レスほんと、サンクス! 余談ですが、こういうの作ってました。 f20.aaa.livedoor.jp/~tori/html/upboard/updir/SafeArray.lzh 内容は参照カウンタ(本命)と配列クラス(デモ)です。 デバッグは済んでいないので使用は自己責任で。 それじゃー。:D
- 775 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:02:39 ]
- む!直リンできないか。
f20.aaa.livedoor.jp/~tori/html/upboard/upboard.cgi または、 f20.aaa.livedoor.jp/~tori/html/upboard/updir/ から、取れるかも。
- 776 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:21:35 ]
- >>774
deleteした直後にNULLを代入するのは、 二重解放によるヒープの破壊を防ぐために良いことだが、 そうすると二重解放していてもチェックに引っかからないぞ! NULLを代入するのをやめるか、 NULLの代わりに-1などのアリエナイ値を代入するのがいいかと。
- 777 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:26:58 ]
- へー
- 778 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:41:57 ]
- ^←これどうやって入力するんでしょうか?いい加減コピペは卒業したい
- 779 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:43:44 ]
- キーボード右上「へ」のキー
ってか、ここはC/C++の質問スレなわけで・・・
- 780 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:46:35 ]
- >>778はポケコンの使い手
- 781 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 02:54:30 ]
- ^おぉ出た〜!!Thank you very much.
演算子で使うんです。
- 782 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 03:40:19 ]
- >>781
メモ帳とかでキーボードのキー全部押して試してみたら・・・ Shift押しながらのキーも・・・
- 783 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:38:34 ]
- キートップに刻印されているのだから、
キーボードをよく見ろ、でいいと思うが。
- 784 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:41:12 ]
- たまにいくつかの記号の類を出せないキーボードはあるよな
なに考えて作ったのかと思う
- 785 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 08:04:29 ]
- >>784
もしかして:ASCII配列のキーボードをJIS配列の設定で使用?
- 786 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:28:10 ]
- うちのキーボードは半角の”\”だせなんだぜ?
\になる。
- 787 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:43:42 ]
- 前は、チルダの位置が2つずれてなかったっけ。
今のはちゃんとしてるようだが。
- 788 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:43:50 ]
- 俺も俺も
- 789 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 17:11:13 ]
- だいぶ前だけど、I/Oの「今月の添付ディスク」コーナーでは
毎回必ずアンダーバーの入力の仕方が書いてあったことを思いだした
- 790 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:32:12 ]
- 変な質問かもしれませんが
OSはC言語で作られているんですよね? WindowsのアプリケーションはWinMain関数ですが、Windows自体の main関数はどのような感じに記述されてるんでしょうか? MSの人で無いと解らないんですかね?
- 791 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:38:56 ]
- >>790
・C言語で書かれた物が、全てmain()を持っているわけではありません。 ・main()はアプリケーションの入り口としての規格上の共通部であり、どう実装されるかは環境依存です。
- 792 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:39:13 ]
- >>790
WinMain や main は、それを呼び出すルーチンがあって リンク時にそれをリンクしてるだけなんだぜ。 そのルーチンがどうなってるかは気にならないのか
- 793 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:49:47 ]
- >>791
>C言語で書かれた物が、全てmain()を持っているわけではありません。 そうなんですか・・。Cの全てのソフトがmainとかWinMainで始まると思っていました。 >main()はアプリケーションの入り口としての規格上の共通部であり、どう実装されるかは環境依存です。 つまり色んなOSのアプリケーションの入り口として〜mainなのですか。 >>792 >WinMain や main は、それを呼び出すルーチンがあって >リンク時にそれをリンクしてるだけなんだぜ。 >そのルーチンがどうなってるかは気にならないのか 気になりますね。でも、そーゆーの気になりだすと 最終的には電気信号とかのレベルまで行かなくならなきゃならなそうです。。。 とりあえず今はC勉強します。お二方とも解答ありがとうございます。
- 794 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:56:36 ]
- アセンブラの勉強をしてみるといいかもね。
- 795 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:06:10 ]
- あ専ブラですか、分かりました。
- 796 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:12:19 ]
- 俺の発言みたいにとられるようなレスしないでください。
どうでもいいけど。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:13:05 ]
- crt0.asm とかね
- 798 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:17:29 ]
- >>796
お前の発言みたいにとらないでください。 どうでもいいならレスするな死ね。
- 799 名前:794=791 mailto:sage [2007/08/09(木) 18:29:29 ]
- >>796
自己主張したいならコテでもつけとけ。
- 800 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:32:30 ]
- >>798
だって>>793のレスに対して>>794はレスされたのに 無関係のお前が>>795みたいなレスされたら誤解するだろ。 >>799 こんな馬鹿げた自演してどうすんだよ。しょーもない。 やっぱどの板でもID表示欲しいわ。とりあえず今日はROMる。
- 801 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:34:36 ]
- どうでもいいんだろ。
誤解されとけや
- 802 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:45:21 ]
- >>793
本題から少し脱線してしまうが・・・ Windowsのアプリケーションの入り口は、厳密には、WinMainではないよ。 Windowsがアプリの実行ファイル(EXE)をロードして実行する際の入り口は、 「エントリポイント」と呼ばれているが、それは特定の名前のC言語の関数ではない。 C言語に限定されていないし、ましてや、C言語の関数名でもない。 マイクロソフトのCコンパイラ・リンカを使っているのであれば、 リンカのマニュアルで/ENTRYオプションの説明を読むべし。
- 803 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:46:53 ]
- アセンブラの勉強しても仕方ないだろう。
マシン後とアセンブリー言語が理解できるようになってから、アセンブラを勉強したほうがイイ。
- 804 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:54:11 ]
- マシン「語」
アセンブリ「言語」 なんて使う必要がなければ、理解しなくていいよ。 基本的なコンピュータのアーキテクチャを知っていれば、それで十分。
- 805 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 22:58:02 ]
- いや、仕事で使うから覚えますた ってだけじゃぁなぁ
金にはならないかもしれないけどとことんやれば良いと思うよ
- 806 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:11:36 ]
- そういう人好き
- 807 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:27:24 ]
- >>790
初期のUNIXは確かに古いC言語や一部アセンブラで書かれていた。 だが、Windowsや旧MacOSやμiTRONやVxWorksや...(略)はC言語で書かれているのだろうか?
- 808 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:41:43 ]
- 今でも一部アセンブラは当然として、
MacOSはObjectiveCかPascal、 他もCやC++、 字句解析などでは適宜別の言語、 などなど適材適所でしょ。
- 809 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:02:59 ]
- >>805
仕事かどうか、金になるかどうか以前に、 人生に許された時間は限られているんだよ。 >>807 WindowsはNT系はC言語で書かれたと聞いてる。 NT4.0の頃に聞いた話なので今は違うかもしれない。
- 810 名前:デフォルトの名無しさん [2007/08/10(金) 16:34:55 ]
- 低俗な質問でほんとすいません。
クラス型のポインタを持つ配列を作りたくて苦心していますが上手く行きません。 (global.h) extern class hoge *p[10]; (global.cpp) hoge *p[0] = new hoge; と書いていまして、.cppのほうでエラーが出ます。 文法的に間違っていると思うのですが、どこが間違っているのでしょうか? 宜しくお願いします。
- 811 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:19:31 ]
- いろいろ違う気がするが・・・w
エラーメッセージ出して1つずつ解決しては。 class定義は見える位置にあると仮定して、 extern hoge *p[10]; p[0] = new hoge; とやるかな。
- 812 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:24:56 ]
- >>810
問題の中身よく見てないけど、とりあえず上の方に出てるやつ数個でも良いからエラーの内容書け
- 813 名前:810 [2007/08/10(金) 18:43:28 ]
- >>811
ありがとうございます。 なお、クラスを定義してる"Hoge.h" もGlobal.hにてインクルードしてます。 今、エラーコード全部ぐぐって内容見てる途中です。 >>812 error C2040: 'PC' : 'int []' は 'cHoge *[4]' と間接操作のレベルが異なります。 error C2440: '初期化中' : 'cHoge *' から 'int []' に変換できません。 error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。 error C2501: 'PC' : 識別名を宣言するのに、型が指定されていません。 (※クラス名だけはcHogeに書き換えています) というエラーが出るんですが、ぐぐってみても今ひとつ要領を得ないのです。 「ああ、こういう間違った書き方してるから暗黙的にint型にされてるんだな」とは分かるんですが、では正しい書き方はどうなのかというのが分かりません。 普通にint型とかchar型のポインタ配列作る気持ちでやってたら、ちょっと勝手が違うようですね。手強いです。
- 814 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:03:38 ]
- >>813
>hoge *p[0] = new hoge; は hoge *p[0]; p[0] = new hoge; hoge *p[0]; だと >error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。 が出る。 だから hoge *p[10]; p[0] = new hoge; この辺はintやらcharでも変わらんと思うけど。 >>811のexternは書き間違いとちゃうかな。 勘違いだったらすんません。
- 815 名前:810 [2007/08/10(金) 19:15:13 ]
- >>814
ありがとうございます。 いままさに、同じような感じで書いていました。 結果は×でした。エラー内容全く同じ…… (Global.h) #include "HogeHoge.h"(クラス内容の書かれたヘッダ) extern class cHoge *PC[4]; (Global.cpp) cHoge *PC[4]; PC[0] = new cHoge; という状態で、全く同じエラーでます。 どうやら、PC[0]が*PC[4]の一部と見なされてない感じです。 エディタ上でPC[0]の上にマウスカーソル乗せたら、 cHoge *PC[4]ってポップアップが出てるんで、余計にわけわかんない。 なんで暗黙的int扱いされるんでしょう?
- 816 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:20:28 ]
- ごめん。
全然違うわ。 extern cHoge PC[4]; cHoge PC[4]; こうじゃねぇ?
- 817 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:23:15 ]
- なんだよ、よそで配列定義してあってのexternじゃないのかよ。
ファイル1つでうまくいった上で、分けたらおかしくなってるのか もともとやりかたがわかんないのかどっちだよ。
- 818 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:28:08 ]
- とりあえず、これでどうなる
(Global.h) #include "HogeHoge.h"(クラス内容の書かれたヘッダ) extern cHoge *PC[4]; (Global.cpp) cHoge *PC[4]; PC[0] = new cHoge; 念のため言っておくけど、こっちではコンパイルできてるから うまくいかないなら環境書いてね
- 819 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:31:55 ]
- なんか知らんが、トップレベルに
PC[0] = new cHoge; を書いてるんじゃなかろうな。
- 820 名前:810 [2007/08/11(土) 09:46:02 ]
- おはようございます。
3時過ぎまで頑張っていました。 >>817 そうです。分けたらおかしくなりました。 >>818 Global.h に extern class cHoge *p[4]; と書き、どこでも良いので関数内で cHoge *p[4]; p[0] = new cHoge; は上手く行きました。 所で、extern class cHoge ではなく、extern cHoge なのですか? そう書くとずらずらエラーがでるのですが…… ちなみに、他にもextern class hogehoge *tmp; という書き方でグローバルな インスタンスを3つほど作っていて、そちらは問題なく動いているのですが、 これはexternに対する私の理解が根本的に間違っているのでしょうか? >>819 えっと、その通りです。global.cppは、関数を含まないソースファイルです。 Global.hでextern宣言したものに実体を与えてグローバルクラスとして使うための ものです。 上記の通り、トップから外して関数ないで宣言したら普通に使えました。 やはり、根本的に何か間違っていますか?
- 821 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 10:27:14 ]
- >>820
何というか・・・ まず1つ目 グローバルなオブジェクトには、どこかに実体が必要だが、 その実体というのは、cHoge*なのであってcHogeではない。 グローバルスコープでnewするのは行儀が悪いのでやるべきではない。 2つ目 クラスの定義が既に済んでいるのであれば、class は書く必要がない。 もしclassを書かないと具合が悪いのであれば、クラスの定義が済んでいない。 3つ目 グローバルなオブジェクトは気軽に作るべきではない。
- 822 名前:810 [2007/08/11(土) 10:53:07 ]
- >>821
実はいま、グローバルを極力廃止して書き直してます。 そちらでは問題なく動いています。 「よく使うのはもう纏めてグローバルにしたら?」って言われてやってみたのですが、 確かに初動は早いけどひとたびエラー起こったらわけ分からなくなりました。 >その実体というのは、cHoge*なのであってcHogeではない。 !!! class書かないとエラーでるので、仰るとおり、定義されてないようです。 そうか、そういうことだったのか…… グローバルスコープでのnewもやめます。 ありがとうございました。
- 823 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:17:31 ]
- 最近C++を始めて、静的配列のdelete[]クラッシュにはまったんですが、疑問があったので質問
以下のコードでクラッシュしないのはなぜ? #include <string> int main(){ int is=0; //これが無いとクラッシュ std::string array[2] = {"hoge", "fuga"}; delete[] array; return 0; } コンパイラはMS製です
- 824 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:18:44 ]
- そもそもdeleteなんているのか?newがみえないんだが・・・
- 825 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:26:43 ]
- new[] してないものを delete[] してはいけません。
new[] と delete[] は1対1
- 826 名前:823 mailto:sage [2007/08/11(土) 22:27:30 ]
- いらないことは分かってますけど、ただ疑問に思ったので…
上記のエラーを探ってた時に、変数の有り無しでプログラムのクラッシュするしないが変わるものかなと…
- 827 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:29:22 ]
- スタック破壊。
- 828 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:31:41 ]
- >>826
たまたま使ってるコンパイラではクラッシュしなかっただけの話だろ。 他のコンパイラだと鼻から悪魔が出てきても文句は言えない。
- 829 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:36:29 ]
- >>826
その手の行為で、どんなことが起きるかは、基本的に予測できない。 間違ったことをした、ずーーーーーっと後で落ちる、っていうことも多い。 知らないうちに関係ない変数が書き換わってる、とかいう現象になることもある。
- 830 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:38:38 ]
- サンクス、何となく理解した
|

|