【初心者歓迎】C/C++室 Ver.40【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.40【環境依存OK】 - 暇つぶし2ch650:デフォルトの名無しさん
07/08/01 21:39:29
>>631
今日会社の VS2005 PE に SP1 を当てたけど、デバッグビルドで実行
すると、operator delete で落ちます。何が違うのかしら。

>>632
memory はたぶん問題なくて、最適化がからんでそうです。代入文が、
std::auto_ptr<int> i(std::auto_ptr_ref);
に変形していて、デストラクタで int の値を解放しにいって落ちると。
もぎゃー

651:デフォルトの名無しさん
07/08/01 21:47:54
もぎゃーってなに?

652:もぎゃー
07/08/01 22:44:09
なんかはやらそうと狙ってる予感。

653:デフォルトの名無しさん
07/08/02 05:56:27
void型って、どんな型にも切れるただのメモリアドレスって考えれば良いのですか?

654:デフォルトの名無しさん
07/08/02 06:07:04
void型なんて変数は存在せんぞ。
void *型ならあるが。

655:デフォルトの名無しさん
07/08/02 06:48:25
std::auto_ptrみたいな不良品つかわずにboost::scoped_ptr使えばいいのに

656:デフォルトの名無しさん
07/08/02 07:45:14
URLリンク(kansai2channeler.hp.infoseek.co.jp)

正の整数を二つ読み込んで、その乗算をシフト演算によって行いたいのですが、プログラムがうまく動きません。
強制終了されてしまいます。

(例) 53×25=53×(2^4+2^3+2~0)=(53を左に4ビットシフト)+(53を左に3ビットシフト)+(53を左に0ビットシフト)

どこが悪いのでしょうか・・・。

657:656
07/08/02 07:46:01
あ、2^0です。

658:デフォルトの名無しさん
07/08/02 07:58:22
mainのkが未使用変数の使用であるとかって警告でなかった?
エスパーすると、divideのkがmainのkに影響を及ぼすことはないよ。

659:デフォルトの名無しさん
07/08/02 08:00:34
おっと、未使用変数->未初期化変数、または、値の割り当てられていない変数

660:656
07/08/02 08:13:08
>>658
はい、警告とかは出てないんですよ・・・。
どこをどう直せばいいでしょうか。

661:デフォルトの名無しさん
07/08/02 08:29:17
ヒント:ポインタ アドレス渡し

662:デフォルトの名無しさん
07/08/02 08:37:18
まずはコンパイラの警告レベルを最大にすることだな。
VC++なら/W4
bccなら-w
gccなら-Wall

663:656
07/08/02 08:56:45
>>662
おお!そんなことができるのですね。ありがとうございます。

警告 W8013 test.c 26: 's' は、おそらく値が代入される前に使われている(関数 divide)

と出ました。どういう意味でしょうか・・・。

664:656
07/08/02 09:12:45
>>661
ありがとうございます。kのアドレスをdevideに引き渡せばいいのですね。
そこは修正したのですが、まだダメみたいです・・・・。

665:デフォルトの名無しさん
07/08/02 09:48:28
void* と char* のビット表現は等しいんだっけ?

666:デフォルトの名無しさん
07/08/02 09:52:07
int s;

*k = 0;
while (no>0) {
 count[*k] = analyze(no, s); ←初期化されてないsが使われてる
 no -= (1<<count[(*k)++]);
}

667:656
07/08/02 09:53:38
すいません、できました。
divide関数内で
*k++とかいう変なことをしてたみたいで・・・

*k += 1;

と書き換えたらできました。
ありがとうございます。

668:656
07/08/02 09:55:16
>>666
ああなるほど、ポインタは括弧をつければよかったんですね・・・orz

sは初期化されてないからですか・・・わかりました、ありがとうございます。

669:デフォルトの名無しさん
07/08/02 10:03:19
>>665
うん。

"A pointer to void shall have the same representation and alignment requirements as a pointer to a character type."
ISO C 6.2.5 Types p26

670:656
07/08/02 10:03:24
というか、sを戻り値として返すなら、divide関数でsはいらないですね・・・。
アホだ・・・orz

671:デフォルトの名無しさん
07/08/02 15:03:47
Wallにしたら標準ライブラリでさえゴルァされるから使い物にならんと思うんだけど

672:デフォルトの名無しさん
07/08/02 15:06:18
>>669


673:デフォルトの名無しさん
07/08/02 15:31:38
std::vector<int> v;って宣言したときにこれのサイズを保持する型を
std::vector<int>::size_typeって宣言するのではなく
変数名vを使って宣言したいのですがなんか良い方法無いですかね?

typeof(v)::size_typeとかboost::range_size< typeof(v) >::type (←勿論通りません><)
みたいにできたらめちゃ便利だと思うんですが

674:デフォルトの名無しさん
07/08/02 16:03:34
typeof は提案されたこともあるみたいだけどねえ。
いまんとこはできないね。

そういう場合は typedef しとくというくらいしか言えんなあ。

std::vector<int> v_t;
v_t v;
v_t::size_type i;

675:デフォルトの名無しさん
07/08/02 16:06:22
typedef が抜けてた。まあいいや。

676:デフォルトの名無しさん
07/08/02 16:07:40
><;

677:デフォルトの名無しさん
07/08/02 16:12:12
<>;

678:デフォルトの名無しさん
07/08/02 16:13:49
×;

679:デフォルトの名無しさん
07/08/02 16:26:34
◇;

680:デフォルトの名無しさん
07/08/02 16:34:10
チョー!

681:デフォルトの名無しさん
07/08/02 16:34:32
BASIC スレにでも迷い込んだのかと思った

682:デフォルトの名無しさん
07/08/02 16:38:20
CLS

683:デフォルトの名無しさん
07/08/02 16:53:10
すいません。
void *型ってどんな型にも切れるただのメモリアドレスって考えれば良いのですか?


684:デフォルトの名無しさん
07/08/02 17:08:12
お前別スレで質問してきちんとした回答貰ってるだろうが
礼儀知らずにも程がある

685:デフォルトの名無しさん
07/08/02 17:10:30
ええ~、してないですYo!

686:デフォルトの名無しさん
07/08/02 17:13:33
死ね

687:デフォルトの名無しさん
07/08/02 17:19:25
一方的に決めつけられて、死ねといわれる始末。
なんという仕打ち。

688:デフォルトの名無しさん
07/08/02 17:19:49
「切れる」っていうのが、なんかアクロバティックな用法だなあ。
こう、「アタシは侍ザマス!」みたいな?
「void*型からunsigned long(*)(bstr_t const&, IDispatch**)型に斬ってしんぜるナリ!」みたいな?

689:デフォルトの名無しさん
07/08/02 17:22:55
>>683
言葉の使い方は他人に通じるように

690:デフォルトの名無しさん
07/08/02 17:23:44
>>673-674
今はdecltypeという名称になっている。

691:デフォルトの名無しさん
07/08/02 17:26:33
>>687
同じ文体なんだから別人なら普通変えるだろ。バカかよ

692:デフォルトの名無しさん
07/08/02 17:27:25
不毛

693:デフォルトの名無しさん
07/08/02 17:31:11
><;

694:デフォルトの名無しさん
07/08/02 17:35:58
>>684
そのスレどこ?

695:デフォルトの名無しさん
07/08/02 17:58:27
>>692
C++スレだけに

696:デフォルトの名無しさん
07/08/02 18:08:50
>>694
スレリンク(tech板:653-654番)

>>695
誰がうまいこと言えと(ry

697:デフォルトの名無しさん
07/08/02 18:25:13
>>684
別スレじゃなくてこのスレかよ
>>685
お前の言葉は本当だったな

698:デフォルトの名無しさん
07/08/02 19:16:35
構造体のサイズをsizeofで取るとなんか不思議な結果が返ってくる。

struct TEST {
char chr[3];
};
printf("%d\n", sizeof(TEST));

結果:3

struct TEST2 {
long lng;
char chr[3];
};
printf("%d\n", sizeof(TEST2));

結果:8

TESTとTEST2で明らかに計算方法が違うのはなぜなんでしょうか?

699:デフォルトの名無しさん
07/08/02 19:23:41
「パティング 構造体」でググると幸せになれるよ

700:デフォルトの名無しさん
07/08/02 19:26:02
パディングじゃね?

701:デフォルトの名無しさん
07/08/02 19:28:07
そして、なぜパディングが入るかというと、境界調整のため。

702:デフォルトの名無しさん
07/08/02 19:42:41
>>699-701
URLリンク(www.g-ishihara.com)
を見て納得しました!
ありがとうございます。


703:デフォルトの名無しさん
07/08/02 19:50:02
すいません、おじゃまします。
コンストラクター、デストラクターからstaticのメンバー変数にアクセするにはどのように記述したらよいでしょうか。


704:デフォルトの名無しさん
07/08/02 20:01:11
>>703
普通に。

705:デフォルトの名無しさん
07/08/02 20:49:03
>>704
解答としては不適切。


706:デフォルトの名無しさん
07/08/02 20:57:27
>>703
不適切。

707:デフォルトの名無しさん
07/08/02 21:00:09
>>705
それ以外に答えようが

708:デフォルトの名無しさん
07/08/02 21:00:16
静的メンバからのアクセスは制限あるけど
逆は問題ないよね?

709:デフォルトの名無しさん
07/08/02 21:17:00
うん

710:デフォルトの名無しさん
07/08/02 21:23:30
fstreamが遅いんですが何とかなりませんか。
wfstreamともなるとアホみたいに遅いです。

711:デフォルトの名無しさん
07/08/02 21:25:32
端末変えろ

712:デフォルトの名無しさん
07/08/02 21:27:53
fstream捨てたら。

713:デフォルトの名無しさん
07/08/02 21:44:25
>>711
端末を変えるとfstreamが速くなるのですか?
>>712
機能的にはstdioより好ましいですし標準ですから、出来れば使いたいのですが。
wfstreamとgetline()を使って書かれた単にコピーするだけのC++プログラムが、
perlだのpythonだので書かれた、正規表現を用いてちょっと文字列を置換する
スクリプトよりも遅いので、呆れます(後者でもちゃんとエンコード変換を
行っているのにです)

714:デフォルトの名無しさん
07/08/02 21:54:44
>>713
アタリマエだろ。
単にコピーするだけにgetlineを使うお前が悪い。

715:デフォルトの名無しさん
07/08/02 21:55:41
単にコピーするなら read して write だろう・・・。

716:デフォルトの名無しさん
07/08/02 21:58:47
その処理にgetlineを使おうとする発想にまず驚いた

717:デフォルトの名無しさん
07/08/02 21:59:34
>>714
ああ、説明不足でしたね。
行単位で下らない置換処理を行う下らないプログラムを色々な言語や
ライブラリを使って書いてみたのです。
ですので、例えばPerlで書いたものも、$/をundefせずに行単位で入力して
いますから、条件は対等のはずでしょう。

C++で書いたものがあまりに遅いので、試しに置換処理を抜いて
コピーだけにしたところ、その時点で他のスクリプト言語にさえ負けている
(wfstreamの場合は)ことが判明してしまいました。

718:703
07/08/02 22:04:32
RESありがとう御座います。
そうですか、普通にアクセス可能ですか。。。
現象としては「static int xxx」で宣言した変数がリンカーで次のようにエラーしてしまいます。(環境VC2005)
LNK2001: 外部シンボル ""public: static int PerfMonMgr::xxx" (?xxx@PerfMonMgr@@2HA)" は未解決です。」
宣言部にstaticを取って「int xxx」で宣言するとエラーは出ないんですが。
ちなみにこのコードはDLLのコードの一部なんですが関係ありませんでしょうか。


719:デフォルトの名無しさん
07/08/02 22:07:27
変数の実体作ってないんでしょ。

720:デフォルトの名無しさん
07/08/02 22:07:34
>>717
perlとかはIO関連はC/C++の標準関数は使わずに独自にコントロールしてるんじゃなかったっけ?
PerlのIOはPerl向けにチューニングしてるからこそそうなるんであって、
何にもしない素でもC++なら速いと思ってるなら幻想だろう。
構造的な美しさをとるか泥臭くても速度をとるかでケースバイケースじゃないかなぁ。

721:デフォルトの名無しさん
07/08/02 22:09:23
なかなか興味深い結果だな。

722:デフォルトの名無しさん
07/08/02 22:10:24
ちょっと話題がそれるが、C++でファイルのコピーだけならこんなカンジでいいんじゃね?

std::ofstream("out.bin", std::ios::binary) << std::ifstream("in.bin", std::ios::binary).rdbuf() ;

723:デフォルトの名無しさん
07/08/02 22:26:00
OSネイティブの入出力APIを使うストリームバッファを自分で書いたりしてみたらどう?

724:710
07/08/02 22:29:02
↓実験に使ったソースです
URLリンク(tonosiki.mbnsk.net)

青空文庫のテキスト形式の小説を読み込んで、<ruby>タグを適当に
挿入するだけの下らないプログラムです。
サンプル入力として夏目漱石の三四郎を入れてあります。

C++のものは、Boost(Xpressive)、ICU、COM(VBScriptのRegexエンジン)
を用いたものと、単にコピーするだけのもの3種(wchar_tに変換しない版、
自前で変換する版、wfstreamに任せる版)
スクリプトはJScript(WSH用)、perl, python
それとC#のものがあります。

C++で無変換なものが無論最速でしたが、次に速いのはJScript + wshext.dll
でした(cscript.exeなどから明示的に起動するとずっと遅い)
C++ではICUがなかなか健闘しましたが、boost版はPythonやPerlに勝てず、
wfstreamでただコピーするだけの版は、これらのどれよりも遅かったです。


725:710
07/08/02 22:35:40
>>720
もともとPerlは速い印象でしたが、エンコード指定のopen()を使うと
それほどでもない
というか、意外にもPythonのほうが速かったです。

どっちもcygwinのもの(つまり遅い実装)を使ったのですが
それよりもVC++7.1でコンパイルしたネイティブのC++プログラムが遅いのは
流石にどうかと思いました

ちなみにC++のものは、std::basic_stringを戻り値として使わず
全て参照引数渡しで同じインスタンスを使いまわすとパフォーマンスの
改善が見られましたが、素直な書き方に比べて大きな違いが出るほどでは
ありませんでした。

726:デフォルトの名無しさん
07/08/02 22:41:30
Cが最速なのは間違いがないよ
C単体ならDLLを使わなくていいんだから・・
時間が掛かるところは、読み込み、出力と置換する場所のサーチでしょ?
文書をバッファに蓄えておいて、置換作業と並列化してみ

727:710
07/08/02 22:46:34
>>726
Cでも書こうかと思ったのですが、
char->wchar変換
置換1~3
wchar->char変換
の5段ぐらいのフィルタ処理を行っており、文字列処理とメモリ管理が
あまりに面倒臭いのでやめましたw

CでやるならGCが欲しいです。

728:デフォルトの名無しさん
07/08/02 22:48:01
>>724
キミのCのコードは訳が分からん(知識がない訳だが・・・)
もっと単純に書いてみ char型にして<<を探して置き換えるだけだろ??
そしたら速いかもよ

729:710
07/08/02 22:49:59
>>728
Cでは書いていません。C++です。

拡張子cppのものは全てmain()を含むメインプログラムで、
全てのソースでfilter.hppをインクルードしています。


730:デフォルトの名無しさん
07/08/02 22:50:24
>>727
726でCといったのはC++を含むわけだが・・・
単純に言って、一行読み込んで《・・》を書き換えるだけでしょ?
なぜ何工程も必要なんだよ???

731:710
07/08/02 22:52:11
>>730
日本語を含む正規表現での置換処理ですので、wchar_tに変換しています。
置換を3段階行っているのは、もっと効率化できるかもしれませんが、
どの言語でもやっていることは同じです。

C++だけ特に遅くなるような書き方をしているつもりはありません。

732:デフォルトの名無しさん
07/08/02 22:52:15
C++のlocale周りを理解している人間なんて本当に少ない。おれもよくわかんないし。
それはぐぐっても日本語英語問わず資料が少ないことからも想像が付く。
そして処理系の実装はバグ持ちで遅く、ますます誰も使わず、負の悪循環。

>>730
その処理を全部省いたとしても、ワイド文字ストリームという砦が待ち構えている。


733:デフォルトの名無しさん
07/08/02 22:53:54
>>731
正規表現使わずに、例えばchar c[1000]; に読み込んで
if ( c[i]=='<' && c[i+1]=='<' ) とやった方が速いだろ

734:デフォルトの名無しさん
07/08/02 22:56:18
>>733
他言語との比較でそんな抜け道はだめだろ。

735:デフォルトの名無しさん
07/08/02 22:59:27
速く変換したいという目的なんでしょ?そのためにどれが速いか検討していると
普通に考えると正規表現使わず<<だけ見つけた方が速いだろって事だ

736:デフォルトの名無しさん
07/08/02 23:00:29
wchar_t なんかに変換する必要ないじゃん。
その文字コードに合わせて処理すればいいだけ。

737:710
07/08/02 23:02:44
>>735
いいえ。違います。
速くしたいのならmmap()でも使いますが、Perlで以下の3行で済む下らない
仕事に一体何行費やすつもりですか。
試しにCのコードを書いてみてください。可変長の文字列を使う時点で既に
Cでは面倒くさいです。

$s =~ s{(.+)[#「\1」に傍点]}{
        sprintf('<ruby>%s<rt>%s</ruby>', $1, 'ヽ' x length($1))}ego;

$s =~ s/|?([々\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}]+)《(.+?)》/<ruby>$1<rt>$2<\/ruby>/go;

$s =~ s{([||〔\s])([^|〔《》\s]+)《(.+?)》}{sprintf(
    '%s<ruby>%s<rt>%s</ruby>', ($1 eq '|') ? "" : $1, $2, $3)}ego;

738:デフォルトの名無しさん
07/08/02 23:03:43
C++ならなんでも速いというのは幻想。
速くなるようにチューニングする余地が用意されているというだけで、
素のままで速いとは限らない。正に今回はその好例。

739:デフォルトの名無しさん
07/08/02 23:04:18
文字コードが何かもわからないのに>>733はないだろ
UCS-2だったらどうする


740:デフォルトの名無しさん
07/08/02 23:04:37
どのコードでも、《》の配置は換わらないのでは???

741:デフォルトの名無しさん
07/08/02 23:06:57
>>735
普通の考えなんか価値なす。
大事なのは現実の速度。


742:710
07/08/02 23:07:40
>>740
漢字《ふりがな》
といったパターンを捕まえて、変換しなければなりませんので、
文字クラスにUnicodeが使えると便利なのです。

それに、「全ての言語で」Unicodeの正規表現を使っています。
C++だけわざわざそうしているわけではありません。

743:デフォルトの名無しさん
07/08/02 23:09:53
>>735
他の言語でも同じことやったら、またC++より速くなったりしてw

744:735
07/08/02 23:09:59
>>710、ちょっとまってて いま書くから
もとのファイル354Kしかないから100倍 (35M) に増やして比較しようぜ!
そしたら速度差は歴然になるからさ

745:デフォルトの名無しさん
07/08/02 23:11:22
思わずどっちの方向に歴然とした差が生まれるのかwって言いたくなる。

746:デフォルトの名無しさん
07/08/02 23:12:45
ソース見てなかった
》携帯からのtypoかと思ってた

747:デフォルトの名無しさん
07/08/02 23:12:52
じゃあ俺はHSPで書く!!

748:735
07/08/02 23:16:30
ちなみに漢字コードは元々のシフトJISに限定するけどいい??

749:デフォルトの名無しさん
07/08/02 23:18:52
ついでだからwchar_tに変換するものも書いてよ。
変換方法は何でもいいからさ。

750:デフォルトの名無しさん
07/08/02 23:20:50
>>731
まず入力にはboost::spirit::file_iteratorを使う
デコード用のiteratorは自分で書くかboostの中から探す
つぎにxpressiveのregex_token_iteratorでトークンに分ける(cvsのでないと遅くなるので注意)
そのトークンに付け加えつつストリームに出力する
こうしてstd::stringどころかヒープさえほとんど使わないで出力する
これで世界最速のプログラムの完成である (完)

751:デフォルトの名無しさん
07/08/02 23:23:05
そもそも、Perl だろうが何だろうが、
ターゲットの文字コードは分かんないとあかんだろ?

752:デフォルトの名無しさん
07/08/02 23:25:29
文字コードを統一する部分を持っていればよい

753:デフォルトの名無しさん
07/08/02 23:32:51
標準ではないけど、mbs系の関数使えば?

754:デフォルトの名無しさん
07/08/03 00:02:30
やっぱ面倒になった
方針だけ書いておく

e[2]="《";
f[2]="》";

strに一行読み込み

str[n] str[n+1]がeと一致するものを探して
k=n-2、n-4・・・を調べて
(c[k]>134 && c[k]<160) || (c[k]>223 && c[k]<254)でないもの(漢字でない)を見つける
そのあとに<ruby>を挿入して、漢字もつなげる
以下同様にやる

755:デフォルトの名無しさん
07/08/03 00:21:35
とりあえず、boostをベースに、iostreamをstdioにしてみた。
コンパイラはVC2005。対象は、SANSHIRO.txtを20回繰り返した7MBのテキスト
測定は面倒だったから、cygwinのbashのtimeで。

boost$ time ./boost ../input/20.txt
real 0m9.324s
user 0m0.031s
sys 0m0.015s

stdio$ time ./boost ../input/20.txt
real 0m7.356s
user 0m0.031s
sys 0m0.015s

756:710
07/08/03 00:24:26
>>755
stdio版も意外に遅いですね。
time cygstart aozora.js ../input/20.txt
の結果はどうでしょうか?
(jsがwshext.dllに関連付けられているかどうか分かりませんが)

757:デフォルトの名無しさん
07/08/03 00:30:29
710死ね

758:673
07/08/03 00:56:35
どうやらBOOST_TYPEOFというのがあるらしいですね
VCのバグを使ってほぼ完全にGCCのtypeofをエミュレートできるようです
(しかし本当にtypeofという名前だったとは…^^;)

早速使って見ましたが意図したとおりに動いていい感じ
range_XXXとかのメタ関数やsmart_ptr,optionalのようなテンプレートと相性がよいようで、
変数から型の参照が文法の上で自在に行えるのは気持ち良いです

>>690
検索かけてみましたが0xではその名前になるようですね
Visual C++0x(仮)を楽しみに待ちます

759:デフォルトの名無しさん
07/08/03 01:00:35
bash-3.1$ perl -v
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
Binary build 820 [274739] provided by ActiveState URLリンク(www.ActiveState.com)(ry

bash-3.1$ time perl aozora.pl ../input/20.txt
real 0m7.738s
user 0m0.015s
sys 0m0.031s

bash-3.1$ time cscript aozora.js ../input/20.txt
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

real 0m7.637s
user 0m0.015s
sys 0m0.031s

760:デフォルトの名無しさん
07/08/03 01:00:43
decltype という名前にしたのは、
動的な型は得られないということを分かりやすくしたのかね。

761:デフォルトの名無しさん
07/08/03 01:14:35
ちなみに、当方ではどうやってもcscriptかwscriptが起動し、
(aozora.jsへの20.txtのD&Dでも)wshext.dllはどうやれば
使えるのかは判らずじまい

762:710
07/08/03 01:16:13
>>759
わざわざ有難うございます。
JScriptは、cscript.exeやwscript.exeに実行させると私のところでも遅いです。
もしWindowsのレジストリ上でjsがwshext.dllに関連付けられている場合は、
>>756で書いたようにcygstartでaozora.jsを実行してみてください。
私のところでは、詐欺のような速さになっていました。

ともあれ、stdio版なら、PerlやJScriptよりはどうにか速くなる
といったところでしょうか。

763:710
07/08/03 01:19:46
>>761
レスを読んでいませんでした。
自分も特別に何かしたわけではないので、分からない……

764:デフォルトの名無しさん
07/08/03 01:23:06
wshext.dllって、実行がexplorerのスレッド内だったりして、
計測できるのはIPC(ファイルをexplorerに渡す)部分だけ、
みたいなオチはないよね?

765:710
07/08/03 01:27:50
>>764
……んー。よく考えると、それ以前の問題として、cygstartで起動すると、
すぐに呼び出し側に制御が戻ってきてしまうので、timeで計測ができるはずは
ないですね。

失礼しましたm(_ _)m

766:710
07/08/03 01:49:44
wshext.dllがバカみたいに速いらしいぞ、と勘違いする人がいるかもしれないので
念のため書いておきますが、全くのデタラメでした。
自分も>>755さんと同じように、cygwinのbashのtimeでいい加減に計測していたのです。
jsだけは関連付けで起動させるために、cygstartで実行させていました。
cygstartで走らせたものの実行時間を計れるわけがないのに。大ボケです。

とりあえず、iostreamさえ捨てればC++でスクリプトに勝てると分かりました。
が、コードを書くのが格段に面倒くさいのに、大して差があるわけでもないのが
悩ましいですね。
自分でもっとずっと複雑な計算をするプログラムなら、当然比較にならない
ほどC/C++が優位でしょうけれども。

767:デフォルトの名無しさん
07/08/03 01:56:15
cygwin の GCC って遅かった気がする。
MinGW の方がいい。

768:デフォルトの名無しさん
07/08/03 01:56:45
勘違いするのはお前くらい

769:710
07/08/03 02:09:08
>>767
C++のプログラムは全てVC++7.1でコンパイルしました。
cygwinのnewlibは、ロケール周りの実装があまりにショボいので、実質的に
ワイド文字の処理には使えないと思います。
(VC++にしても、いくつも地雷を踏みましたが。boostも、boost::regexは
バグがあってダメでした)

>>768
そうですね><

770:デフォルトの名無しさん
07/08/03 02:12:39
><

771:デフォルトの名無しさん
07/08/03 02:13:30
xlocaleをちょっと弄ったらboost::regexも落ちないようになるらしいけど詳細は忘れた

772:デフォルトの名無しさん
07/08/03 02:18:51
そうですね><

773:710
07/08/03 02:22:31
>>771
xlocaleてことは、boost::regexのバグではなくVC++のバグってことですかね。

774:デフォルトの名無しさん
07/08/03 02:31:15
勘違いするのはお前くらい

775:デフォルトの名無しさん
07/08/03 02:31:50
ライブラリのバグかコンパイラのバグか知らんけど
動くコンパイラはあるわけだからね

776:デフォルトの名無しさん
07/08/03 02:38:02
このスレの>>622に解決法あるじゃん


777:710
07/08/03 02:41:17
>>776
あれ、それと同じ問題なのかな?
実はそれを教えていただいた>>616は自分なんですよ。

ただ、>>616の場合はxpressiveの正規表現のコンパイル時にスタックが
壊れてSEGVになっていたのですが、
boost::regexの場合は、バックリファレンス含みの正規表現で検索すると、
SEGVではなく、boost::regexが例外をスローしていました。

778:デフォルトの名無しさん
07/08/03 02:49:13
じゃあこれかな
URLリンク(capslockabcjp.kitunebi.com)

779:デフォルトの名無しさん
07/08/03 02:51:50
バグってるのはお前くらい

780:710
07/08/03 02:54:02
>>778
実はそれをboostスレに報告したのも自分なのです。
その正規表現の例を見ればモロバレでしょうが。

随分前にそれで「使い物にならん」と判断して放置していたのですが、
ここ数日、ふと思い立ってxpressiveで組みなおしてみたのです。

781:デフォルトの名無しさん
07/08/03 02:58:01
使い物にならんのはお前くらい

782:デフォルトの名無しさん
07/08/03 03:11:23
この流れは酷いな。

783:デフォルトの名無しさん
07/08/03 04:53:07
filter.hppってなんじゃらほい

784:デフォルトの名無しさん
07/08/03 08:14:09
STLportとかApache C++ Standard Libraryとかはどう?

785:デフォルトの名無しさん
07/08/03 11:39:09
script言語はC/C++で書いてある
比較すること自体バカらしい・・・

786:デフォルトの名無しさん
07/08/03 11:52:46
cpythonよりIronPythonのが速いっつー話もあるけどな

787:デフォルトの名無しさん
07/08/03 21:58:54
class Base{
protected:
  int a = 0;
public:
  int Test(){
   return ++a;
  }
}

class Dev : public Base{
public :
   int Test(){
    a += 2;
    return a;
   }
}

int main ()
{
  Base * b = new Dev();
  printf ( "%d", b->Test() );
}

こうやると 1 と表示されます
これを2と表示させる(Devクラスの方のTest関数を呼び出す)ことってできないですかね?

788:デフォルトの名無しさん
07/08/03 22:00:09
virtual

789:デフォルトの名無しさん
07/08/03 22:13:27
お、できました
ありがとうございます

790:デフォルトの名無しさん
07/08/03 23:25:50
もう一つ質問です

Base * b = new Dev[10];

for( int i = 0; i < 10; ++i ){
  b[i]->Test();
}

こういうようなことをやっているとループが何回か回った後で
メモリ外アクセス落ちちゃうんですが何が原因かかわかりませんか?

791:デフォルトの名無しさん
07/08/03 23:33:59
>>790
つーかそれコンパイル通らないだろ

792:デフォルトの名無しさん
07/08/03 23:35:03
Base * b = new Dev[10];

for( int i = 0; i < 10; ++i ){
  b[i].Test();
}

こうですた

793:デフォルトの名無しさん
07/08/03 23:40:53
配列をポリモルフィックに扱ってはいけない
それをやりたいならポインタの配列とかでやるべき

794:デフォルトの名無しさん
07/08/03 23:49:00
boost::scoped_array<Base> b( new Dev[10] );

for( int i = 0; i < 10; ++i ){
  b[i].Test();
}
ならおk?

795:デフォルトの名無しさん
07/08/03 23:49:38
>>793
そうなんですか?

ポインタの配列というと、下のような感じでいいんでしょうか?

Base **b = new Dev*[10];

for( int i = 0; i < 10; ++i ){
  b[i] = new Dev();
  b[i].Test();
}

796:デフォルトの名無しさん
07/08/03 23:53:33
>Base **b = new Dev*[10];

これコンパイル通らないだろ。

797:793
07/08/03 23:55:00
>>795 ソースはMore Effective C++の第三項。ぜひ一読を

798:デフォルトの名無しさん
07/08/03 23:56:31
>>794 同じこと。

799:デフォルトの名無しさん
07/08/03 23:57:42
>>795
ねたじゃn

800:デフォルトの名無しさん
07/08/03 23:59:41
>>796
Base **b = new Base*[10]; はいけましたが
Base **b = new Dev*[10]; はダメみたいです

801:デフォルトの名無しさん
07/08/04 00:12:01
ポインタの配列調べてきました、こんなんでいいんですか?
malloc久しぶりに使いますた

Base **b = (Base**)malloc(10 * sizeof(Dev*));

for( int i = 0; i < 10; ++i ){
  b[i] = (Dev*)malloc(10 * sizeof(Dev));
  b[i].Test();
}


802:デフォルトの名無しさん
07/08/04 00:13:52
>>801
Base やら Dev やらは構造体なの?

803:デフォルトの名無しさん
07/08/04 00:14:46
>>802
>>787のやつです

804:デフォルトの名無しさん
07/08/04 00:16:00
mallocじゃコンストラクタが走らないだろう・・

Devを指すBase*の配列を作ればいいと思うよ、多分

805:デフォルトの名無しさん
07/08/04 00:27:19
こうか?
typedef Base* PBase;

std::size_t n = 10;
PBase** b = new PBase[n];
for (std::size_t i = 0; i < n; ++i) {
  b[i] = new Dev;
  b[i]->Test();
}
いい加減boost::ptr_vector使えとか言いたい。

806:デフォルトの名無しさん
07/08/04 00:28:11
ptr_vectorはalgorithmが使えないから・・・

807:デフォルトの名無しさん
07/08/04 00:33:47
>>806
boost::indirect_iteratorでなんとかなる話?

808:デフォルトの名無しさん
07/08/04 00:39:59
違う、アルゴリズム体操の話。

809:デフォルトの名無しさん
07/08/04 00:42:20
>>807
くやしく

810:デフォルトの名無しさん
07/08/04 00:42:59
なんだあほか

811:デフォルトの名無しさん
07/08/04 00:49:08
>>809
URLリンク(www.boost.org)
value_typeがT*(一般に*演算子が使える型)なイテレータをラップして
value_typeがTであるイテレータにするアダプタ。

812:デフォルトの名無しさん
07/08/04 00:55:04
>>805さんの方法で上手くいきました、ありがとうございます

813:デフォルトの名無しさん
07/08/04 02:58:29
こういうこんがらかるようなソースは嫌い

814:デフォルトの名無しさん
07/08/04 03:03:32
こんがりコーン

815:デフォルトの名無しさん
07/08/04 03:04:27
普通に一個一個newすればいいのに

816:デフォルトの名無しさん
07/08/04 03:12:07
newが現れた。newが現れた。・・・おや?new達の揚子江が・・・・・!?

817:デフォルトの名無しさん
07/08/04 03:22:39
兆候って言えよ

818:デフォルトの名無しさん
07/08/04 12:30:45
template <typename T> void f( typename boost::call_traits<T>::param_type x);
みたいな定義で
type x;
f(x);
のようにして使いたいんですが(要はf<type>(x)とかするのがめどい)
何か良いアイデアありませんか?

819:デフォルトの名無しさん
07/08/04 12:53:48
template <typename T> void f(T x)ならそのままf(x)できるけどboost::call_traitsってなんだっけ?

820:デフォルトの名無しさん
07/08/04 12:54:11
f(x)で呼べるだろ。

821:デフォルトの名無しさん
07/08/04 12:55:27
>>819
boost::call_traits<T>::param_typeは、
引数がクラス型ならconst T&、組込型ならTというように、引数に最適の型になる。

822:819
07/08/04 12:56:31
>>821
だったら>820。

823:デフォルトの名無しさん
07/08/04 13:14:08
普通に考えればそうなるはずなんですが、結果は

#include <boost/call_traits.hpp>

template <typename T> void f(typename boost::call_traits<T>::param_type) {}

int main() {
int x;
f(x);
}

error C2783: 'void f(boost::call_traits<T>::param_type)' : テンプレート 引数を 'T' に対して減少できませんでした
'f' の宣言を確認してください。

oops。。。

824:デフォルトの名無しさん
07/08/04 13:24:07
コンパイラは何?
vc6だとboostの一部は使えないよ。

825:デフォルトの名無しさん
07/08/04 13:40:31
工工工工工工エエエエエエ(´д`)エエエエエエ工工工工工工

826:デフォルトの名無しさん
07/08/04 13:42:43
VC8です
あとGCC3.4でも試してみたが駄目ですた
型推論が上手く行かない為だと思うんですが、これはバグなのか
言語仕様上の限界なのかよくわかりません

827:デフォルトの名無しさん
07/08/04 14:14:16
2.5 というのをファイルから読み込んだんですが、これを小数(Float)に変換するには
どうすればいいんでしょうか?

828:デフォルトの名無しさん
07/08/04 14:17:26
↑質問をちょっと訂正です
変換する上で便利な関数はありますか?
atoiか何かで1文字づつ変換して入れてくしかないんでしょうか?

829:デフォルトの名無しさん
07/08/04 14:28:47
atof(), strtod()

830:デフォルトの名無しさん
07/08/04 14:29:03
ありゃまatofなんて関数があったんですね
解決しました

831:デフォルトの名無しさん
07/08/04 14:42:03
あとふ

832:デフォルトの名無しさん
07/08/04 14:46:03
acof

833:デフォルトの名無しさん
07/08/04 18:51:54
>>826
ググったら上のほうにこんなのがあった。
URLリンク(lists.boost.org)
どうやらC++の仕様らしい。

834:デフォルトの名無しさん
07/08/04 19:17:57
関数ブロック内で定義した関数って、
外部リンケージと内部リンケージどっちなんですか?

関数はstatic以外、外部リンケージつう説明を読むと外部リンケージですけど、
別のファイルから使うことなんて出来ないですよね?

てか、リンケージの説明が微妙によくわかりません。
なんか良い説明してるページってありますか。

835:デフォルトの名無しさん
07/08/04 19:46:56
warning: ISO C forbids nested functions

836:デフォルトの名無しさん
07/08/04 19:58:55
>>835
ああ・・・ああ・・・・なんてこったい。
で、入れ子関数はGCCだと内部リンケージになるらしいですね。

837:デフォルトの名無しさん
07/08/04 21:23:18
void hoge() {
 struct nested_fn { void foo() { /* valid nested function */ } };
}

838:デフォルトの名無しさん
07/08/04 22:18:04
ちょっと組込み系で
簡単なGUI作っているのですが

GUI部分とメインロジックを接続するイベントモデルを
設計しているのですが、最近のトレンドだとどんな
感じで実装してるのですか?

関数ポインタ方式
シグナル-スロット方式
ターゲット/メッセージ方式
とかなのかな?

あと実際に実装してみようと思うと何かうまい資料とか
あると助かるのですが、みなさんは実装しようとしたとき
何を参考に実装しているの?

839:デフォルトの名無しさん
07/08/05 04:49:13
XMLResourceかね、XULみたいな
でも組み込みじゃ無理か

840:デフォルトの名無しさん
07/08/05 05:08:02
C++でSingletonなClassを実装したいのですが、staticを使う方法しか思いつきません。
出来ればstaticを使用せずに実現したいのですが可能でしょうか。
具体的なコードや、参考HPのURLを示していただけると助かります。
よろしくお願いします。


841:デフォルトの名無しさん
07/08/05 05:22:37
static 使わずに Singleton なんて無謀

842:デフォルトの名無しさん
07/08/05 05:25:15
extern

843:デフォルトの名無しさん
07/08/05 05:27:56
なんでstaticを使いたくないんだろうか?

844:デフォルトの名無しさん
07/08/05 05:30:46
インスタンス取得関数を friend 関数で作り、
そのインスタンスへのポインタをグローバルに置く、
くらいが限界か。
全く意味がないけど。

845:デフォルトの名無しさん
07/08/05 06:05:06
ファクトリ用のクラスを作ってそこでインスタンスを管理するとか。
もっともファクトリにstaticが必要になるような気もするけどw

846:デフォルトの名無しさん
07/08/05 08:34:24
C++以外の言語でもstatic相当のものを使わないと無理だよな。

847:デフォルトの名無しさん
07/08/05 09:25:28
うまく説明できないんですが、BCBで何も考えずに__closure使ってます。
これを使わない場合、どう書けばいいですか?エスパーさんよろしこ

848:エスパー
07/08/05 09:27:07
死ね

849:デフォルトの名無しさん
07/08/05 09:36:20
説明できないならソースで説明してくれ

850:デフォルトの名無しさん
07/08/05 09:38:27
しょうゅdeも11お

851:デフォルトの名無しさん
07/08/05 09:58:55
delete x,y,z;
はOKなのに、配列に対する
delete [] x,y,z;
で、うまくいかない理由を教えてください。
一文で各方法はないでしょうか?


852:デフォルトの名無しさん
07/08/05 10:04:14
>>851
delete x,y,z;も全然良くない。
deleteとdelete[]演算子は1つしか演算対象を取らない。
また、カンマ演算子は最低の優先順位なので、こうは書ける。
delete x, delete y, delete z;
delete[] x, delete[] y, delete[] z;
1行に複数文を並べるのと大して変わりはないが。

853:デフォルトの名無しさん
07/08/05 10:07:54
マクロ

854:デフォルトの名無しさん
07/08/05 10:08:33
配列と通常のやつのdeleteが異なるってことが気にくわねぇなら
プリプロセッサとmplを組み合わせて、delete_(x, y, z,...);みたいな物作ろうぜ
既に誰かが作ってるかもしれないが

855:デフォルトの名無しさん
07/08/05 10:11:44
そもそも配列new[]は使わないし、
deleteも生で使うのはダサい。

856:デフォルトの名無しさん
07/08/05 10:11:57
初心者なんですが、fopenってファイルを開くだけでメモリに乗せるわけではないですよね?
ちょっと疑問に思っていまして・・・

857:デフォルトの名無しさん
07/08/05 10:14:13
>>855
じゃあどうするの?

858:デフォルトの名無しさん
07/08/05 10:14:28
裏でバッファリングを始めている可能性はあるが、
気にするようなことではない。

859:デフォルトの名無しさん
07/08/05 10:15:49
生ポだろがスマポだろうがお構い無しに意味上での構築破壊が出来る構文が必要ということか

860:デフォルトの名無しさん
07/08/05 10:16:11
>>857
new[]→std::vectorあるいはもっと低水準のメモリ確保ルーチンへの二極化。
delete→boost::scoped_ptr, boost::shared_ptr

861:デフォルトの名無しさん
07/08/05 10:17:06
>>860
そもそも世の中boost使えない場合が多いの
そんな限定していいの?

862:858
07/08/05 10:19:13
>>858
うーん、TB級のファイルをfopenで開くことって出来ますかね・・・

863:856(訂正)
07/08/05 10:20:32
>>858
間違えましたorz

864:デフォルトの名無しさん
07/08/05 10:23:08
ほほえましいな

865:デフォルトの名無しさん
07/08/05 10:28:06
>>840
ソフトウェアの立ち上げを早くするために
遅延ロードみたいなことをしたいってこと?

866:デフォルトの名無しさん
07/08/05 10:30:08
はい

867:デフォルトの名無しさん
07/08/05 11:22:59
>>861
生を安全なものにするには、ラップするか、使い方に厳密な決まりを作る、しか無いよ。
本質的には。
既存の膜がないなら、できる範囲で自作するのが一番いいと思うけど。

868:デフォルトの名無しさん
07/08/05 11:57:29
boost::shared_ptr
自分で実装するのめんどい誰か実装して。

869:デフォルトの名無しさん
07/08/05 11:59:06
すでに実装済み

870:デフォルトの名無しさん
07/08/05 11:59:44
めんどいから誰かが実装してくれたのが boost じゃないの

871:デフォルトの名無しさん
07/08/05 12:35:04
あんなでかいライブラリ使いたくねー
他いらねーしshared_ptrだけ実装してくれよ

872:デフォルトの名無しさん
07/08/05 12:58:41
既に実装済み

873:デフォルトの名無しさん
07/08/05 13:01:09
じゃあフリーで使える単体のshared_ptrだけ作ってくれよ

874:デフォルトの名無しさん
07/08/05 13:06:18
>>873
boostからshared_ptrだけコピペして使えよ

875:デフォルトの名無しさん
07/08/05 13:06:46
既存

876:デフォルトの名無しさん
07/08/05 14:17:52
テンプレートライブラリがどういうものか分かってないんじゃね

877:デフォルトの名無しさん
07/08/05 14:50:05
boostのshared_ptrもいろいろincludeしてたりして、
依存性を調べるのが面倒くさいからなー。
shared_ptr.hppひとつコピペしたら済む話じゃないでそ?

878:デフォルトの名無しさん
07/08/05 14:51:25
>>868
std::tr1::shared_ptr
libstdc++くらいしかまだ実装していないと思うけど。

879:デフォルトの名無しさん
07/08/05 14:53:04
>>860
こういう流れになるから std::auto_ptr も挙げるようにしようぜ。

880:デフォルトの名無しさん
07/08/05 15:03:11
>>879
auto_ptrを挙げるならばその罠や制限についても説明しなければならないだろ
単純なshared_ptrまがいなら色々見たことがあるし
そもそも基本的な原理は単純そのものだが
とうぜんそれらはshared_ptrほど注意深く実装はされていない

>>877
プリプロセッサに食わせて出力をgrepするだけの話だが
そもそも取り込むファイルが環境依存だからな

881:デフォルトの名無しさん
07/08/05 15:10:22
>>880
> auto_ptrを挙げるならばその罠や制限についても説明しなければならないだろ

shared_ptr を並べて挙げとけば十分だよ。

罠や制限があっても share_ptr よりコストは低いし標準だし、
単純な例外安全目的にはぴったりだ。

882:デフォルトの名無しさん
07/08/05 15:32:32
コンテナに突っ込めない出来損ないのスマポが標準だ?笑わせてくれる

883:デフォルトの名無しさん
07/08/05 15:39:05
誰が笑おうがコンテナに突っ込めなかろうが、標準は標準。

単純な delete 強制のためだけに boost が要るなんて言われても
面倒なんだよ。

884:デフォルトの名無しさん
07/08/05 15:40:43
笑うのはいいこと、もっと笑おう

885:デフォルトの名無しさん
07/08/05 15:48:59
>>882
コンテナに突っ込めるスマポが標準にないところも笑いどころ。

886:デフォルトの名無しさん
07/08/05 17:08:20
今、ある数学のプログラムをネット上で見つけたので、
それをコンパイルすることを試みているのですが、
エラーがいっぱい出て、うまいごとにコンパイルできません。
Borland社のbcc32というのを使ってます。

そのソースはこちらのウェブサイトに全部載ってます。

URLリンク(www.math.temple.edu)

それから、コマンドプロンプトでコンパイルを試みた結果、
以下のようなエラーが出てきました。
そのエラーにあったようにデバッグを試みたが、
どこをどうデバッグすればいいかもわからなかったので、
どなたか分かる方がいれば本当に助かります。

887:886
07/08/05 17:09:16
C:\Documents and Settings\Math\デスクトップ\steiner code>bcc32 stei
ner-code.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
steiner-code.c:
エラー E2219 steiner-code.c 39: マクロ 'RANDM' の呼び出しにおける引数の個数が誤
っている(関数 buildtree )
エラー E2188 steiner-code.c 39: 式の構文エラー(関数 buildtree )
エラー E2219 steiner-code.c 52: マクロ 'RANDM' の呼び出しにおける引数の個数が誤
っている(関数 buildtree )
エラー E2188 steiner-code.c 52: 式の構文エラー(関数 buildtree )
警告 W8065 steiner-code.c 183: プロトタイプ宣言のない関数 'srand48' の呼び出し(
関数 main )
警告 W8065 steiner-code.c 188: プロトタイプ宣言のない関数 'exit' の呼び出し(関数
main )
警告 W8065 steiner-code.c 192: プロトタイプ宣言のない関数 'exit' の呼び出し(関数
main )
警告 W8065 steiner-code.c 207: プロトタイプ宣言のない関数 'buildtree' の呼び出し
(関数 main )
警告 W8065 steiner-code.c 208: プロトタイプ宣言のない関数 'length' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 208: プロトタイプ宣言のない関数 'error' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 209: プロトタイプ宣言のない関数 'optimize' の呼び出し(
関数 main )
警告 W8065 steiner-code.c 211: プロトタイプ宣言のない関数 'output_tree' の呼び出
し(関数 main )

888:886
07/08/05 17:10:32
警告 W8065 steiner-code.c 212: プロトタイプ宣言のない関数 'exit' の呼び出し(関数
main )
エラー E2451 steiner-code.c 218: 未定義のシンボル HUGE(関数 main )
警告 W8065 steiner-code.c 225: プロトタイプ宣言のない関数 'buildtree' の呼び出し
(関数 main )
警告 W8065 steiner-code.c 227: プロトタイプ宣言のない関数 'length' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 228: プロトタイプ宣言のない関数 'error' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 230: プロトタイプ宣言のない関数 'optimize' の呼び出し(
関数 main )
警告 W8065 steiner-code.c 232: プロトタイプ宣言のない関数 'optimize' の呼び出し(
関数 main )
警告 W8065 steiner-code.c 232: プロトタイプ宣言のない関数 'length' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 232: プロトタイプ宣言のない関数 'error' の呼び出し(関
数 main )
警告 W8065 steiner-code.c 237: プロトタイプ宣言のない関数 'output_tree' の呼び出
し(関数 main )
*** 5 errors in Compile ***

889:デフォルトの名無しさん
07/08/05 17:22:28
>>886
上から順番につぶしていけば?
標準から大きくずれている&独自の書き方が多いでとても読解する気になれんw
取り合えずRANDMマクロは単に乱数欲しいだけみたいだからrand()にでも置き換えてみるとか?


890:デフォルトの名無しさん
07/08/05 17:24:05
昔のソースなんだろ。
1989年と書いてあるな・・・

891:886
07/08/05 17:32:28
>>889

ありがとうございます。
RANDM()と書いているところをrand()に置き換えたらいいんでしょうか?

>>890

だとしたら、最近のコンパイラではコンパイルできないということでしょうか?

すみませんが、ご教授お願い致します。

892:デフォルトの名無しさん
07/08/05 18:00:10
何の宿題かぐらいはちゃんと書けよ。


893:デフォルトの名無しさん
07/08/05 18:03:24
#include <stdlib.h>
を加えて、以下の修正を

typedef double REAL;
#define RANDM() (rand() / (double)RAND_MAX) /* uniform random deviates in (0,1) */
#define INITRAND() (srand(57731))

void buildtree(int k, int topvec[])
REAL length(void)
void optimize(REAL tol) /* a small positive number */
REAL error(void)
void output_tree(void)

int main(){ /* Inputs NUMSITES, DIMENSION, sites; outputs successive best Steiner
  :
  :
  :
return 0;
} /* End of Steiner tree program. */

894:886
07/08/05 18:03:56
>>892

なんの宿題か、というわけでもないのですが、
自分は数学関連の研究をしているもので、プログラミングに関しては
ほとんど知らないわけですが、たまたま自分の研究に関連する
プログラムをネットで見つけたので、それを使えるようにしたいと
思い、なんとかコンパイラをインストールするところまでには
至ったんですが。

895:デフォルトの名無しさん
07/08/05 18:04:32
-AKオプションつけるとどうなる?

896:デフォルトの名無しさん
07/08/05 18:05:56
ごめん。[0, 1] じゃなくて [0, 1) みたいだからこうだな。

#define RANDM() (rand() / (RAND_MAX + 1.0)) /* uniform random deviates in (0,1) */

897:886
07/08/05 18:13:26
>>893 >>896さん

親切にありがとうございます。早速実行してみましたが、こうなりました。

C:\Documents and Settings\Math\デスクトップ\Lenny's File\steiner code>bcc32 stei
ner-code.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
steiner-code.c:
エラー E2379 steiner-code.c 39: ステートメントにセミコロン(;)がない(関数 buil
dtree )
エラー E2379 steiner-code.c 52: ステートメントにセミコロン(;)がない(関数 buil
dtree )
エラー E2379 steiner-code.c 182: ステートメントにセミコロン(;)がない(関数 mai
n )
エラー E2193 steiner-code.c 187: 呼び出し時のパラメータが足りない:exit(関数 mai
n )
エラー E2193 steiner-code.c 191: 呼び出し時のパラメータが足りない:exit(関数 mai
n )
エラー E2193 steiner-code.c 211: 呼び出し時のパラメータが足りない:exit(関数 mai
n )
エラー E2451 steiner-code.c 217: 未定義のシンボル HUGE(関数 main )
警告 W8066 steiner-code.c 260: 実行されないコード(関数 main )
*** 7 errors in Compile ***

898:デフォルトの名無しさん
07/08/05 18:15:49
#include <stdlib.h>
#define HUGE HUGE_VAL
#define exit() exit(EXIT_FAILURE)
を追加で少しましになった

まだ、drand48,srand48でエラーが出る
drand48,srand48ってUNIX Cの関数で標準のC関数じゃないのか?

899:デフォルトの名無しさん
07/08/05 18:16:26
rand48 は UNIX/Linux の関数だね。

900:デフォルトの名無しさん
07/08/05 18:18:51
BCCなんて糞コンパイラ使ってるからだよm9(^Д^)プギャー

901:デフォルトの名無しさん
07/08/05 18:20:01
しかし886よ、そのプログラムをなんとか動かせたとして、使い方は判ってるのか。

902:デフォルトの名無しさん
07/08/05 18:20:26
これでどう?
URLリンク(sund1.sakura.ne.jp)

903:886
07/08/05 18:24:27
>>902

わざわざアップまで親切にありがとうございます。エラーが4つになりました。
迷惑をお掛けしました。

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
steiner.c:
エラー E2219 steiner.c 40: マクロ 'RANDM' の呼び出しにおける引数の個数が誤ってい
る(関数 buildtree )
エラー E2188 steiner.c 40: 式の構文エラー(関数 buildtree )
エラー E2219 steiner.c 53: マクロ 'RANDM' の呼び出しにおける引数の個数が誤ってい
る(関数 buildtree )
エラー E2188 steiner.c 53: 式の構文エラー(関数 buildtree )
警告 W8066 steiner.c 261: 実行されないコード(関数 main )
*** 4 errors in Compile ***

904:デフォルトの名無しさん
07/08/05 18:25:37
あ、間違えた。

RANDM(a) の a を削除

905:デフォルトの名無しさん
07/08/05 18:27:21
何かこのプログラム永遠に終了しないみたいなんで、
main の最後の return 0; は不要みたいだな。

906:886
07/08/05 18:28:03
>>900

それじゃあ他の只でダウンロードできるやつ、もしくはフリートライアル
のやつをインストールして、やってみた方がいいでしょうか?

>>901

大体何をしたいかはわかってます。後は試行錯誤です。
InputとOutputのサンプルが載っている論文が手元にあります。

907:デフォルトの名無しさん
07/08/05 18:36:18
>>902 で一様buildできたが、何をするんだこれ?

908:デフォルトの名無しさん
07/08/05 18:42:08
>>906
そのまま一生試行錯誤してればいいよ

909:デフォルトの名無しさん
07/08/05 18:48:14
enum {MSG_OK,MSG_YESNO};
enum {ID_OK,ID_YES,ID_NO};
int Message(char* msg ,int type){
char ch;
switch(type){
case MSG_OK:
printf("%s¥tPush Enter>",msg);
scanf("%c",&ch);
return ID_OK;
case MSG_YESNO:
printf("%s y/n>",msg);
scanf("%c",&ch);
return (ch == 'y' ? ID_YES:ID_NO);
}
return 0;
}
int main(){
Message("question",MSG_OK);
if(Message("How do you do?",MSG_YESNO) == ID_YES)
printf("good¥n");
return 0;
}
というプログラムで、わざとPush Enterと出た時に、Enterを押さないで適当なキーを押すと
huga$ ./a.out
question Push Enter>y
How do you do? y/nhuga$
と表示されます。
フォールスルーでもないし、ちゃんと2度目のMessage関数の呼び出しも出来ている
みたいなのですが、なぜこういう風に動くのでしょうか?

910:886
07/08/05 18:48:41
>>907

説明するのが難しいのでとりあえず論文中にあったInputのサンプルです。

1 2 3
1 0 1.6180339887
0 1.6180339887 1
1.6180339887 1 0
-1 0 1.6180339887
0 1.6180339887 -1
1.6180339887 -1 0
1 0 1.6180339887
0 1.6180339887 1
-1.6180339887 1 0
-1 0 -1.6180339887
0 -1.6180339887 -1
-1.6180339887 -1 0

上のようなInputを与えると、(実際どのような手順で与えるかは
試行錯誤しないとわからないのですが)

new record length 18.5529
topology-describing vector
2 3 7 6 7 6 14
.........................

というOutputが出てくるはずです。
Inputは正20面体のすべての頂点の座標で、Outputはこれらすべての頂点を結ぶ木
(サイクルを作らないようなグラフ)の枝の総長を表わしています。

911:デフォルトの名無しさん
07/08/05 18:52:10
最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。
そして2度目の scanf("%c",&ch); で改行が ch に入る。

912:デフォルトの名無しさん
07/08/05 18:55:22
>>907
一様(いちよう)じゃなくて一応(いちおう)ね
一様は「違い・むらが無い」って意味

913:デフォルトの名無しさん
07/08/05 18:56:46
なんかお子様多いな

914:デフォルトの名無しさん
07/08/05 18:58:18
お前が一番お子様なのにね

915:デフォルトの名無しさん
07/08/05 18:59:23
>>911
>最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。
>そして2度目の scanf("%c",&ch); で改行が ch に入る。
成る程です。
ちなみに、2度目の関数呼び出しの際、1度めに使われた変数の中身はクリアされないんでしょうか?

916:デフォルトの名無しさん
07/08/05 19:01:02
>>910
正20面体って正三角形が20個でしょ?

917:デフォルトの名無しさん
07/08/05 19:01:15
そもそも関数を抜けた時点で ch の中身は保証されなくなる。

918:デフォルトの名無しさん
07/08/05 19:20:14
>>911
>最初の scanf("%c",&ch); でその適当に入力した文字が ch に入る。
>そして2度目の scanf("%c",&ch); で改行が ch に入る。
すいません、何故勝手に改行が入力されるのでしょうか?
その辺のFAQってどこかにありませんでしょうか?
勉強したいので。

919:デフォルトの名無しさん
07/08/05 19:22:51
「y」と「改行」を入力したでしょう。別に勝手に入るわけじゃない。

920:デフォルトの名無しさん
07/08/05 19:27:57
>>918
scanfの仕様に則っただけだからキニスルナ

921:デフォルトの名無しさん
07/08/05 19:28:59
>>918
FAQだけで簡単に済まそうとしているのが間違い。
もっと基礎的なことからちゃんと勉強したら?
基本を知らずにFAQだけ読んでも、得られるものは少ないと思う。

> エラー E2379 steiner-code.c 39: ステートメントにセミコロン(;)がない(関数 buil dtree )

こんなエラーすらを自分で解決できないのでは、先に進みようが無い。

922:デフォルトの名無しさん
07/08/05 19:39:28
>>921
ごめんなさい、ごめんなさい
あのー、基礎的なことってどんなことですか?
何が基礎的なことなのか分からないのです(>_<)

923:デフォルトの名無しさん
07/08/05 19:40:27
基礎的なこと=何が基礎的なことなのか分からないこと

924:デフォルトの名無しさん
07/08/05 19:44:24
C言語を真面目に勉強しろってさ

925:デフォルトの名無しさん
07/08/05 19:46:27
HelloWorldは書いたかい?

926:デフォルトの名無しさん
07/08/05 19:47:19
a,b,cはint型です。
a=0;b=0;c=0;とするところを、a=b=c=0;としても同じでしょうか?

927:デフォルトの名無しさん
07/08/05 19:49:34
>>926
同じ、それくらい入門書でも読んでくれ。

928:デフォルトの名無しさん
07/08/05 19:55:48
a=b=c=0;この場合の代入の順序はどうなんですか?
a=0,b=0,c=0 順番なのですか?
それとも
a=0,b=a,c=a

929:デフォルトの名無しさん
07/08/05 20:01:36
=(a, =(b, =(c,0) ) );

930:デフォルトの名無しさん
07/08/05 20:04:08
優先順位表見てる?
あれに右左も書いてあるべ

931:デフォルトの名無しさん
07/08/05 20:06:11
a = (b = (c = 0)); ということ

932:926
07/08/05 20:12:50
>>928
アフォか俺でも分かるわ

933:928
07/08/05 20:22:08
>>931 しつこくすみません、低能なもんで
a = (b = (c = 0));は
c=0,b=0,a=0 なのですか?
それとも
c=0,b=c,a=b
つまりb = (c = 0)の処理の場合、b=0、b=cどちらが実行されるのでしょうか?

>>930 優先順位表って何ですか

934:デフォルトの名無しさん
07/08/05 20:29:40
わざわざ1つの式にまとめて書いといて、順序もクソも無いもんだ。

935:デフォルトの名無しさん
07/08/05 20:32:08
>>933
試せよそんぐらい。

936:928
07/08/05 20:34:37
>>935
どうやってどちらが実行されてるか試すのですか?

937:デフォルトの名無しさん
07/08/05 20:40:12
> つまりb = (c = 0)の処理の場合、b=0、b=cどちらが実行されるのでしょうか?

なにか違いが?

938:デフォルトの名無しさん
07/08/05 20:45:33
c=0の評価値は0だ

939:デフォルトの名無しさん
07/08/05 20:47:20
>>936
int a;
char b;
a = b = 12345;
printf("%d %d", a, b);

940:デフォルトの名無しさん
07/08/05 20:47:35
a = (b = (c = 0));

cに0が代入される。
bに(c = 0)の式の値が代入される。この場合0なので0が代入される。
aに(b = (c = 0))の式の値が代入される。この場合0なので0が代入される。

941:840
07/08/05 22:23:56
説明不足で申し訳ありません。
C/C++でstaticを使用する場合グローバルに変数の宣言が必要かと思いますが、
クラスの部品化の観点から、出来るだけグローバル変数の使用は避けたいと考えています。
で、記憶が曖昧なんですが、以前static_castなど(テンプレートを使用していたかもしれません)を使用して
GoFのSingletonパターンを実現している記事を見かけましてこちらで質問させていただきました。
何か情報御座いましたらよろしくお願い申します。


942:デフォルトの名無しさん
07/08/05 22:29:35
>>941
グローバル変数は駄目でシングルトンならいいってのは、どういう理屈かね?

943:デフォルトの名無しさん
07/08/05 22:31:51
>>941
>C/C++でstaticを使用する場合グローバルに変数の宣言が必要かと思いますが、
いや…、必要ないよ

class HOGE
{
public:
 static HOGE& get_instance(){
  static HOGE hoge;
  return hoge;
 }
private:
 HOGE();
};


944:デフォルトの名無しさん
07/08/05 22:42:19
>>877
libjingleではboostからshared_ptrだけとりだしてコピペしてる箇所があるって聞いたぞ。
そんなに面倒とも思わんけどなぁ

945:デフォルトの名無しさん
07/08/05 22:56:04
>>877
依存関係の調査自体は bcp 使えば要らない。結果の膨大さにびびるだろうけど。

946:909
07/08/05 23:23:53
>>919
>「y」と「改行」を入力したでしょう。別に勝手に入るわけじゃない。
え、でもscanfで1文字標準入力を取得した後、
returnでmain関数に戻って、もう一度ifでMesssage関数を呼び出してるから
たとえ、改行文字があっても無視されるんじゃないんですか?
それにこのプログラムが意図したと売りに動く場合の、
一度目にenterおしてifでMessage関数呼び出して、2度目のifでMesssage関数
を呼び出してyを入力した場合、
huga$ ./a.out
question Push Enter>
How do you do? y/n>y
good
の場合はHow do you do? y/nでyとenterを押しているのに
なんで正確に動くんですか?
もしかして標準入力の内容ってバッファみたいなところに貯められるんですか?
>>921
自分は886では無いですよ。
少なくともコンパイルエラーを直してから、質問します。

947:デフォルトの名無しさん
07/08/05 23:27:12
>>941
例えstaticやグローバル変数を避けてシングルトンを実装したとしても、
目的を達成する手段が変わっただけで、本質的には何も変わっていない。

そう書いてから942の焼き直しだと気付いた。

948:デフォルトの名無しさん
07/08/05 23:28:01
>>946
>もしかして標準入力の内容ってバッファみたいなところに貯められるんですか?
そのとおり。
標準入力に限らず入出力にはバッファを利用されることが多い。

949:909
07/08/05 23:42:42
>>948
へぇ、知らなかったです。
そんなこと、本には書いてなかったので。
イメージとしては
入力した文字がメモリのどっかに
hogehugamoge
みたいに保存されて、
そこからscanfの引数の変数の型の分(今回はchar型)
コピーされるみたいな感じなんですかね?


950:デフォルトの名無しさん
07/08/05 23:58:44
そう。
正常に動くケースは、1文字目が改行で2文字目がyで3文字目が改行でしょ。
3文字目は読まれずにバッファに残ったままプログラムが終了するだけ。

951:909
07/08/06 00:11:27
ありがとうです。
んで、何文字バッファに保存されるかはOSの実装によると。

952:デフォルトの名無しさん
07/08/06 00:39:39
普通の使い方なら充分なくらいのバッファはあるはず・・・
10文字程度で満杯とかそんなことはまずない。

953:デフォルトの名無しさん
07/08/06 00:45:25
ストリーム入出力ってのは、バッファリングされる入出力のことだ。

954:デフォルトの名無しさん
07/08/06 03:34:18
すみません質問させてください。
txtファイルから、例えば40.123/42.591/43.569という文字列を読み込んで、
真中の42.591だけを数値として変数に格納したいのですが、
どうにも巧い方法が思いつきませんorz
何卒お力をお貸し頂けますようお願い致します。

955:909
07/08/06 03:35:24
     / ̄ ̄ ̄ ̄\
   / ( ( (  ) .) )\
  / ( ( / ̄ ̄ ̄”\ .) )
  / ( ( |.        | ) )
  ( ( (  |   \ハ/ | ) )
  ( ( (  |  ゚ ̄ 〈 ゚ ̄ | ) )
  ( ( (  |      >   | ) )
  (. ( (  |    /へ)  /  ) )
  \_/|\   ー //\/
  / ̄ ̄\ ゛ーー/ ̄ ̄\
./     \ ̄ ̄ ”/     \
|       ●|・|  ||/       |
|   |    ●|・|  ||/       |
|   \_ ●|・|   ||/       |
.\   》||つ【♪1076】___/

956:デフォルトの名無しさん
07/08/06 03:40:07
>>954
C なのか C++ なのか、まずはそれからだ。

957:954
07/08/06 03:41:45
ごめんなさい、Cでお願いします。
後、sage禁止だったのですね。重ね重ねすみませんorz

958:デフォルトの名無しさん
07/08/06 03:49:30
自己判断で
~~~~~~~~~~~~
寧ろage禁止

959:デフォルトの名無しさん
07/08/06 03:50:58
sage禁止とはなんという斬新なルールなのか

960:954
07/08/06 04:01:48
すみません、以後下げるようにしますorz

961:デフォルトの名無しさん
07/08/06 04:22:28
どっちでもいいよ。自分で判断しる。

962:デフォルトの名無しさん
07/08/06 04:28:03
>>957
いろいろ方法はある。

scanf 系関数を使うなら、
%*f のように書式に * を挟むことで
変数に格納しなくなるようにできるのを利用するとか。

あとは1行取得して、
それを strtok で "/" をデリミタにして処理した2番目の文字列を atof するとか。
strtok を使うのが気持ち悪いなら strchr を使ってもいいかもしんない。

963:957
07/08/06 04:48:30
了解です、状況で判断しますorz

>>962
ご解答頂きありがとうございます。
教えていただいた通り、今回はstrtokを使ってみたいと思います。
%*fという表記は知らなかったので勉強になりました。
本当にどうもありがとうございましたm(_ _)m
また皆様のお力をお借りすることがあるかと思いますが、その時はどうぞよろしくお願い致します。

964:デフォルトの名無しさん
07/08/06 04:52:45
strtok()は癖が強すぎるのでお勧めしない。
scanf()でフォーマットを'%*f/%f/%*f"にしてはいけないのか?

965:957
07/08/06 05:55:20
>>964
strtok()は癖が強いのですか。
strtok()を使ったことが無かったので使ってみようかと思ったのですが、
そういうことであれば素直に%*fを使ってみたいと思います。
アドバイスありがとうございましたm(_ _)m

966:デフォルトの名無しさん
07/08/06 05:56:20
test

967:デフォルトの名無しさん
07/08/06 08:26:44
for(int i=0;i<n1;i++) {                          ←ここに飛びたい場合どうするのが一般的でしょうか?
  // 処理                            ↑
    for(int j=0;j<n2;j++) {                      ↑
        if (a[j] == b)    // 条件が成立したらループを抜けて↑
    }
    //処理
}

968:デフォルトの名無しさん
07/08/06 08:35:09
>>967
つ[goto]

まぁ、アルゴリズムを見直してbreakだな。

969:デフォルトの名無しさん
07/08/06 10:36:46
中のループをboolを返す関数にしてしまって
trueだったらcontinueとかね

970:デフォルトの名無しさん
07/08/06 12:31:43
void f()
{
static char *theTxt;

strcpy(theTxt,"TEST¥n");
printf("%s",theTxt);
}
これってtheTxt;がstaticでnull初期化されているから
駄目なんですか?


971:デフォルトの名無しさん
07/08/06 12:38:10
>>970
theTxtはポインタ。
strcpyはポインタの指すアドレスにデータをコピーする関数。

問題は、theTxtがどこも指していないこと。
mallocで確保するとか、配列にするとか、データの領域をまず用意

972:デフォルトの名無しさん
07/08/06 12:39:01
どこも指してない、つーかNULLで初期化されてっからアドレス0を指してる、とも言えるか。
まあ同じだけど。

973:デフォルトの名無しさん
07/08/06 12:41:58
理解出来ました。
有り難うございます

974:デフォルトの名無しさん
07/08/06 13:35:12
>>972
>アドレス0を指してる、とも言えるか。
いえない。
因みに、初期化されていないポインタは
「何処を指しているかわからない」

975:デフォルトの名無しさん
07/08/06 13:35:58
>>974
staticがついてると0に初期化される

976:デフォルトの名無しさん
07/08/06 13:36:57
static だから = 0 で初期化されている。
ただ、アドレス 0 だとは限らない。

977:デフォルトの名無しさん
07/08/06 13:40:29
もうヌルポインタが0じゃない話はいいから

978:デフォルトの名無しさん
07/08/06 13:57:16
>>977
「ぬるぽはどこも指していない話」じゃないのか?

979:デフォルトの名無しさん
07/08/06 14:04:28
NULLが0なんじゃない、0がNULLなんだよ。

980:デフォルトの名無しさん
07/08/06 15:01:18
        ぬるぽ! ぬるぽ!
    ぬるぽ! ぬるぽ!  ぬるぽ!
  ぬるぽ!  ∩   ∩ ノ)   ぬるぽ!
 ぬるぽ!   川 ∩ 川彡'三つ  ぬるぽ!
ぬるぽ!  ⊂ミ∩、⊂ミ∩彡⊃    ぬるぽ!
ぬるぽ! ⊂三ミ( ゚∀゚)彡三彡三⊃ ぬるぽ!
ぬるぽ!  ⊂彡川⊂彡川ミ⊃    ぬるぽ!
ぬるぽ! ⊂彡川∪⊃ U川彡⊃   ぬるぽ!
 ぬるぽ!  (ノ ∪  川 ∪ミ)  ぬるぽ!
  ぬるぽ!       ∪     ぬるぽ!
    ぬるぽ!  ぬるぽ!  ぬるぽ!
       ぬるぽ!  ぬるぽ!
           ぬるぽ!

981:デフォルトの名無しさん
07/08/06 21:47:18
#define NULL ぬるぽ
#define 0 NULL

982:デフォルトの名無しさん
07/08/06 22:40:13
fopenやifstreamがどういう処理をしているか気になります。
遠回しにAPIを呼んでたりするんですか?

983:デフォルトの名無しさん
07/08/06 22:47:34
そりゃシステムコール呼ばないとファイル開けまへんがな(´・ω・`)
そこらのOS毎の差異を吸収するのも標準ライブラリの役目

984:デフォルトの名無しさん
07/08/06 22:48:24
そう。 遠まわしに、WindowsならCreateFileとかのAPIを呼んでる。

985:デフォルトの名無しさん
07/08/06 22:51:22
まー結局、細部まで一致しないからWINDOWS API使うのが賢い
かなり単純なものでないとCのみでしょり出来ないからな

986:デフォルトの名無しさん
07/08/06 22:53:31
×>>972,>>974
>>976

C言語の仕様によれば、staticな変数は『定数ゼロ』(K&R第2版)で初期化される。
だから
static char *theTxt;
は、
static char *theTxt = 0;
と置き換える。
ここで、定数ゼロは整数型に代入されれば整数0であり、ポインタに代入されればヌルポインタになる。
ヌルポインタは、(アドレス0を指す処理系もあるかもしれないが、)
『どこも指していないポインタ』が正解。実際のbit列がゼロの連続とも限らない。

従って、ヌルポインタはprintf()の引数として処理できない。

ちなみに、『ぬるぽ』はNullPointerExceptionの略で、ヌルポインタではない。

987:デフォルトの名無しさん
07/08/06 22:54:54
BCCで書いているのですが、突然ファイルオープンができなくなりました。
#include<stdio.h>

main(void){
int i,j,k,t;
int No1,No2;
int Rs[3500][20],Hn[3500]={0};
double u,x,y;
double Odds[3500][20],Poll[3500][20],Poll_S[3500][20],Poll_T[3500][20];
FILE *fpr,*fpw;
fpr=fopen("horse.txt","r");
fpw=fopen("r.txt","w");
while(fscanf(fpr,"%d %d %lf %d",&No1,&No2,&u,&k)!=EOF){
Odds[No1][No2-1]=u;
Rs[No1][No2-1]=k;
Poll[No1][No2-1]=0.788/(u-1.0);
Hn[No1]++;
Poll_T[No1][No2]=0;
Poll_S[No1][No2]=0;
}
何か問題はありますか?教えてください。

988:gotoです
07/08/06 22:55:51
たまには私を思い出してください。
ほら、try-catch句がなかったあの頃を思い出してください・・・

989:デフォルトの名無しさん
07/08/06 22:58:45
>>987
釣り?

990:デフォルトの名無しさん
07/08/06 23:02:37
マジです

991:デフォルトの名無しさん
07/08/06 23:03:22
>>987
とりあえずmainの'{'に対応する'}'と、fcloseが足りない。

992:987
07/08/06 23:07:22
すみません。
ソースが長いので省略しています。
コンパイルエラーはないんですが
テキストファイルが読み込めないんです。


993:デフォルトの名無しさん
07/08/06 23:09:38
>>993
実行方法は?
まさか、カレントディレクトリにファイルがないって落ちじゃないよな?

994:デフォルトの名無しさん
07/08/06 23:10:31
horse.txtが無いんじゃね?

995:デフォルトの名無しさん
07/08/06 23:11:32
errno調べてみ

996:987
07/08/06 23:16:06
horse.txtはあります。
今まで動いていたプログラムもファイルが開かなくなりました。
ライトファイルはできます。

997:デフォルトの名無しさん
07/08/06 23:18:07
どっか別のアプリケーションがファイルを開いてるんじゃない?
アプリケーションを全部終了するか、最悪OS再起動したら直るんじゃないかね。

998:987
07/08/06 23:19:45
と思って再起動したんですが直りませんでした。

999:デフォルトの名無しさん
07/08/06 23:22:17
errno !!!

1000:デフォルトの名無しさん
07/08/06 23:26:49
次スレ!!!
スレリンク(tech板)

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch