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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 22:39:18 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.56【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1215278693/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。

534 名前:533 mailto:sage [2008/07/30(水) 00:27:06 ]
いろいろ間違えたごめん忘れてください

535 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:27:24 ]
(なぁなぁ、badって何?)

536 名前:デフォルトの名無しさん [2008/07/30(水) 00:32:52 ]
あ、startじゃぁまずいですか^^;
aに変えました。そしたらbatのみになりました。
参考元URL:homepage3.nifty.com/mmgames/c_guide/index.html
しかも、printf("hello");で改行なし「hello」が表示されました。
お騒がせ申し訳ありません。m(--)m参考元さんも申し訳ありません。m(--)m


537 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:42:51 ]
unixでtestという実行ファイルを作ってハマった当時の俺

538 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:44:24 ]
あるある
うん。あるある

539 名前:デフォルトの名無しさん [2008/07/30(水) 00:44:46 ]
batやらbadやら恥ずかしいことばかり書き込んでしまいました。
セキュリティーホールがあれば入りたいです。
startをaに変更すると、
www-2ch.net:8080/up/download/1217345861729515.WpasSs
な感じになりました。これで夜も安心して眠れます。

>>527 startにしたのは無知だからでした。「手始めにスタート」のつもりでした。
この本というかサイトではそうでした。他のサイトを見てみると他の記述もありましたが、
最初に見たこのサイトの記述で貫こうと思います。

>>532 決定的な回答ありがとうございます。小鳥の1歩ほど前進することができました。
終わりなきC言語を心ゆくまで堪能したいと思います。親切にしてくださってありがとうございます。

>>534 いっしょにセキュリティーホールに入りませんか。

>>535 完全に撃ち間違いです。申し訳ありま栓。



540 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:16:56 ]
すいません質問です。
ソラリスでは使えてたのですが、Linuxだとエラーが出てしまってgoogle検索したのですがいい対応策が見つかりません。

newとdeleteは演算子なのですが、

string * aaa;
というのを.hで宣言し
.ccにて
コンストラクタでNULLクリア
main処理にて値を入れる場合と入れない場合があるのですが、
値を入れない場合に、
デストiラクタでaaaをdeleteしようとすると、落ちてしまいます。
SolarisからLinuxに入れ替えようとしているので、Solarisでは通るのにLinuxでは通らないという事はあるのでしょうか。
簡単にプログラムの例を
classで、
string * aaa;  を宣言しておき、

コンストラクタで、aaaをNULL初期化します。
mainルーチンで、aaaにファイルから文字列を取得するのですが、
該当しない場合はaaaはNULLのままとなっています。
デストラクタで、
if(aaa){
delete aaa;
}
とやっているのですが、そこで落ちてしまいます。
よろしければアドバイスお願いします。







541 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:19:23 ]
コンパイラはgccです

542 名前:デフォルトの名無しさん [2008/07/30(水) 02:19:37 ]
VC++を使用しているのですが、
char ItemObject[1024];
ItemObject = "TEST";
listBox->Items->Add(ItemObject);
とするとコンパイルできません。
プログラミング初心者で、どうすればいいのか分からず困っています。
どなたか、助けて下さい。よろしくお願いします。




543 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:20:01 ]
delete演算子は対象のポインタが 0 の時は何もしないで
戻るようになっている。

従って if文は不要。原因は他の所にあるのではないか。

544 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:23:19 ]
>>542
listBox->Items->Add( gcnew System::String(ItemObject) )

はじめから System::Stringを使え。
それより、このスレはC++/CLIはOKなのかな?C++/CLIはC++とは別物だから明記しておくように。

545 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:28:22 ]
>>543
>>delete演算子は対象のポインタが 0 の時は何もしないで
>>戻るようになっている。
これは知ってはいたのですが、チェックしてしまうクセがついてしまっています。

>>従って if文は不要。原因は他の所にあるのではないか。
やはり原因は他にあるのですかね。
Soralisで通っててLinuxでは通らないので、規格の違いかと思い質問させてもらいました。
(LinuxはSoralisと比べて厳しいので
もうちょっと調べてみます。

アドバイスありがとうございます。


546 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:29:17 ]
>>540
クラスも無いのにコンストラクタとか言ってるのがおかしい。ソース晒せ。

547 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:33:41 ]
memsetでクリアしてたりする?

548 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:39:30 ]
>>546
class hoge{
string * aaa;
}

mainでaaaに文字列を取得
(ない場合は取得しない

hoge::hogeでaaaにはNULLを設定

oge::~hogeで
if(aaa){
delete aaa;
}

としています。

>>547
>>memsetでクリアしてたりする?
memsetはやっていないですね。

文字列取得にはc_str()を使用しています。


549 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:42:52 ]
>>548
hoge にデストラクタもコンストラクタもねーじゃねーか。
ソースを省くな。問題が再現する完全なコードを貼れ。

550 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:51:20 ]
>>549
すいません、完全なコードを張る事ができないので省略してました。
何かしらヒントでもあればと思い質問しました。
SoralisとLinuxの互換性がまだ完全に把握できていないので
分かる人がいればと思い。

もうちょっと自分で調べてみます。解決したら役に立つかわかりませんが書き込みます。

551 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 02:59:06 ]
>>550
問題が再現する最小のコードを作ってもらわないと、エスパーでもなけりゃわからない。
OS間の互換性に原因があると思ってるようだが、どうせ違う。

そういうコード作るのは相談のためでもあるが、基本的な調査の方法でもあるんで、
たいていは作ってる間に自分で気づくんだけどな。

552 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:10:02 ]
全くのあてずっぽうだが、
hogeが意図せずコピーコンストラクタでコピーされてて、
2箇所でaaaがdeleteされているとかないだろうか。
deleteしたばかりで領域が再利用されていない場合に
2回目のdeleteでもエラーにならない処理系は存在する。
Soralisが落ちない処理系で、linuxが落ちる処理系だとすると・・



553 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:19:04 ]
>>552
一応gdbでも処理追ってみたのでコンストラクタが2度通ってる事はないみたいです。


554 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:23:12 ]
privateでコピーコンストラクタをきってみたら?
デフォルトのコピーコンストラクタが使われているなら、
普通のコンストラクタは通らないよ。

stringがstl::stringだったらポインタで持つ意味があるのかは検討したほうがいいな。

555 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:26:42 ]
>>554
なるほどprivateもありですね。試してみます。
stringはstd::stringです。


556 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:49:12 ]
OSが違ったら通らないではなくて、Solarisではたまたまエラーが
出なくてLinuxではしっかりチェックされて落ちるってオチだろうな。

多分ソースにバグがある。

557 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:58:01 ]
>>556
その可能性大ですね。
Solarisはチェックが甘いからたまたま通ってただけな気がします。
時間あるから作り直そうかな。他にもありそうですし。

元々作った人が逃げて改修まかされて困ったもんです。



558 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:58:37 ]
Solarisはdeleteした領域を触っても落ちないからね。






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

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

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