new/deleteで異常終了する(Visual C++)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/01/06(水) 20:35:52Visual C++ 2008でコーディングしています。
コーディングは何度も何度も見直しました。
間違っていません。
なのに、実行するとnewで異常終了します。
debug版で動かすと動きます。release版で動かすと異常終了します。
デバッグのしようがありません。
ホントに、コーディングは正しいんです。
こういう症状の原因って何が考えられるでしょうか。
よろしくお願いします。
deleteでも異常終了します。
未初期化ポインタのdeleteとかそんなのではなくて、
本当にコーディングはあってるのに、異常終了します。
動きは、毎回違います。
例えば、printfデバッグをしようとしてprintfを
挿入すると、異常終了ポイントが変わります。
でも、newかdeleteで落ちます。
ホントに、ホントに、コーディングは合ってるのに
どうしようもありません。
もう何ヶ月も仕事が進みません。
このままだと、クビになっちゃいます。
お願いします、本当に、よろしくお願いします。
0233デフォルトの名無しさん
2010/01/19(火) 22:31:54初期化子を使ってないとかnew失敗でNULLが返ってくる前提とか
初期化メゾットをコンストラクタで呼ばないとか
さんざん言われた設計だけでなく実装段階でもクソだ
0234デフォルトの名無しさん
2010/01/19(火) 22:41:03また 都 市 伝 説 が一つ増えたというわけだ。
0235デフォルトの名無しさん
2010/01/19(火) 23:13:10せめてEffective C++ぐらい読んどけ
0236デフォルトの名無しさん
2010/01/19(火) 23:53:54^^
0237デフォルトの名無しさん
2010/01/20(水) 21:50:18デバッグ版で動いてリリース版で動かない例にはなってないな
0238デフォルトの名無しさん
2010/01/20(水) 22:14:490239デフォルトの名無しさん
2010/01/21(木) 00:24:49> 大半の方はSTLやスマートポインタを使っていないから糞だといっているようです。
アホすぎる。何が悪いと言われているのに理解できないお前のノーミソなど
味噌糞一緒くたにしてしまえ。そのノークソが一番糞だ。
たまにいるよな、これぐらい酷いアホ。
自分が理解できていないことを理解できないアホは救いようがない。
0240デフォルトの名無しさん
2010/01/21(木) 01:03:32世の中の殆どの人間がそうなんだが
0241デフォルトの名無しさん
2010/01/21(木) 01:06:18なんか騒動になってるぞ。株式市場とかにも影響してくるから
釈明の意味でソース晒したほうがいいんじゃね?(情報漏れは
無いようにな)
0242デフォルトの名無しさん
2010/01/21(木) 01:38:50おまえがその騒動とやらのソースをさらせよ
0243デフォルトの名無しさん
2010/01/21(木) 02:30:58でオチるのが常。
しかしこの伸びは異常。やっぱし何かあるからだろな。
0244デフォルトの名無しさん
2010/01/22(金) 10:50:24.objや.lib内ではnon-virtualなメソッドが最新の.hではvirtualになってたみたいな。
プリコンパイルヘッダの仕組みを理解せずに使ってたとか、
同じ.hに依存する2つのライブラリのビルドの整合がとれてないとか。
0245デフォルトの名無しさん
2010/01/23(土) 01:51:42にたようなしょうじょうおこるよね
でばっぐだとあいだにまーじんとってくれるからもんだいおきなかったりするし
printfいれるとうわがきされるいちがかわるからばぐはっしょうするし
はいれつをじさくarrayにおきかえてoperator[]じっそうして
きょうかいちぇっくやったらだいたいつかまるきがする
0246デフォルトの名無しさん
2010/01/23(土) 01:56:410247デフォルトの名無しさん
2010/01/24(日) 14:54:08>設計だけでなく実装段階でもクソ
意味不明
0248デフォルトの名無しさん
2010/01/24(日) 15:32:170249デフォルトの名無しさん
2010/01/24(日) 18:15:550250デフォルトの名無しさん
2010/01/24(日) 20:02:240251デフォルトの名無しさん
2010/01/24(日) 20:20:360252デフォルトの名無しさん
2010/01/29(金) 12:10:34やっぱりコンパイラのバグだと思います。
Oilly Debugとかなんとかいうツールで生成コードを
見せてもらった至る所で違ってました
0253デフォルトの名無しさん
2010/01/29(金) 13:05:48次のバージョンでは直してもらえるかもしれない
0254デフォルトの名無しさん
2010/01/29(金) 14:07:490255デフォルトの名無しさん
2010/01/29(金) 14:14:24VCなどのコンパイラに感染するウィルスがあるって噂
を聞いた事ががあるんで、ウィルスチェック。
そんじょそこらのウィルスチェッカーじゃ弱くて
OSをインストールした直後で一切ネットに繋げていない
状態で、インストール元CD−ROMのパッケージを全部
こじあけてHDに展開して、すべてのファイルについて
MD5をとっておく。
(MD5データのみUSBメモリに保存しておく)
開発マシンの同名ファイルのMD5を取って比較する。
出来ればMD5だけじゃなく他のその手のチェックサム
を合わせて取って比較チェックしたほうがいいかも
0256デフォルトの名無しさん
2010/01/29(金) 16:54:320257デフォルトの名無しさん
2010/01/29(金) 20:59:320258デフォルトの名無しさん
2010/01/31(日) 22:55:15とりあえず収拾してくれ
0259デフォルトの名無しさん
2010/02/02(火) 07:18:390260デフォルトの名無しさん
2010/02/02(火) 08:58:43本当はそうかもしれないけど、他人のコードがおかしいとケンカ売っている以上
もう、「ごめん、僕のミスだった」じゃ済まない。
だから、コンパイラのエラーにするしかなかったんだと思う。
特定のコンパイラだと運よく動くなんてことはままあるのだけど。
0261デフォルトの名無しさん
2010/02/02(火) 10:30:42と俺は思ってる。
本当に問題あるのなら食わせたソースと吐いたアセンブラ突き合わせて説明できるはず。
0262デフォルトの名無しさん
2010/02/02(火) 20:58:210263デフォルトの名無しさん
2010/02/02(火) 23:15:0602641
2010/02/03(水) 00:08:18アクセス規制にかかっててずっと書き込めませんでした。
ちなみに、>>252は私ではありません。
あと、皆さんのコメント見ててちょっと思ったんですが、
クラスの値渡しってまずいんですか?
そういうプログラムを普段書かないから分からないんですが、
0265デフォルトの名無しさん
2010/02/03(水) 00:15:43値渡しは出来る(と思う)が、当然だがクラスへの変更操作は
呼び出し元には反映されないので、同一オブジェクトへの2つ
のバージョンが出来てしまうことになり多くの場合に問題が発生する
ので、通常はポインタ渡しにする。
VCの場合、プリコンパイルドヘッダ周りが結構悪さをして
予期せぬ不具合を作る場合がある。ビルドする際には
面倒でも中間ファイルを削除する習慣を付けたいもの
(その代わりビルドの時間が多少犠牲になる)
0266デフォルトの名無しさん
2010/02/03(水) 00:46:230267デフォルトの名無しさん
2010/02/03(水) 00:49:19コピー&代入がおかしいって既に数人が指摘してんじゃん
0268デフォルトの名無しさん
2010/02/03(水) 03:17:05コピー、代入がしっかり設計されているクラスならば値渡しは問題にならない。
ただ効率の問題が別にあるがそれ自体はバグではない。
おまえの作った>>14のクラスをコピーや代入するとバグる。値渡しはその一例にすぎない。
二重deleteでヒープを破壊するからな。
もしお前がコピーや代入をたまたましていなくて問題がなかったとしても
>>14のクラスを他人が使う可能性があるとしたらやばいな
まあ他にも複合的な問題はありそうだけどな
0269デフォルトの名無しさん
2010/02/03(水) 04:14:40クラス内でnew/de;eteするクラスは自前で書くのが当たり前だろ
0270デフォルトの名無しさん
2010/02/03(水) 04:59:39こういうレベルの人に C++ コードを書かせる時点で間違い
0271デフォルトの名無しさん
2010/02/03(水) 05:04:520272デフォルトの名無しさん
2010/02/03(水) 05:25:40いつまで経ってもバグが取れない
0273デフォルトの名無しさん
2010/02/03(水) 07:08:45そいつが開発をしていること自体がプロジェクトのバグだからな。
0274デフォルトの名無しさん
2010/02/03(水) 13:51:32これで許される環境がウラヤマシスギルw
0275デフォルトの名無しさん
2010/02/03(水) 15:09:43なってしまうんだろうなあと思う。
0276デフォルトの名無しさん
2010/02/03(水) 19:01:590277デフォルトの名無しさん
2010/02/03(水) 20:59:390278デフォルトの名無しさん
2010/02/05(金) 23:22:04いや、そもそもコピーコンストラクタと代入演算子を知らないんじゃね?
0279デフォルトの名無しさん
2010/02/05(金) 23:50:36それがどういう意味を持つのか理解できない奴。
確実に>>1はその類。
0280デフォルトの名無しさん
2010/02/06(土) 04:28:56デフォルトのコピーコンストラクタと代入演算子で上手く行くのにね
0281デフォルトの名無しさん
2010/02/06(土) 08:36:020282デフォルトの名無しさん
2010/02/06(土) 12:05:50こういう中途半端な知ったかが、プロジェクト内に害悪コードをまき散らす。
0283デフォルトの名無しさん
2010/02/06(土) 12:46:04Java/C#を使ってぬるぽで頭を抱えている奴と同類だなw
0284デフォルトの名無しさん
2010/02/06(土) 13:03:030285デフォルトの名無しさん
2010/02/06(土) 13:55:59そーいう連中はしねばいいのに。
0286デフォルトの名無しさん
2010/02/06(土) 18:25:250287デフォルトの名無しさん
2010/02/06(土) 22:19:310288デフォルトの名無しさん
2010/02/08(月) 17:46:210289デフォルトの名無しさん
2010/02/08(月) 18:03:350290デフォルトの名無しさん
2010/02/08(月) 19:10:210291デフォルトの名無しさん
2010/02/08(月) 20:27:21そんな。ソース出したら間違いが分かっちゃって、先輩のせいにできないじゃないですか!!!
もう、コンパイラのせいでいいんです。
0292デフォルトの名無しさん
2010/02/08(月) 21:40:5202931
2010/02/11(木) 17:18:44ありがとうございます。
コピー、代入に話が集中してきていますが、
今回の不具合とは関係ないです。
クラスC1がコピーできないのはその通りえすが、
コピーや代入を前提としてないので大丈夫です。
0294デフォルトの名無しさん
2010/02/11(木) 18:20:090295デフォルトの名無しさん
2010/02/11(木) 18:22:130296デフォルトの名無しさん
2010/02/11(木) 20:48:560297デフォルトの名無しさん
2010/02/11(木) 21:20:56あんたプログラムやめて真剣に他の生き方を模索した方がいいと思うよ
0298デフォルトの名無しさん
2010/02/12(金) 00:36:19じゃああらゆる不具合も前提としなければ大丈夫
0299デフォルトの名無しさん
2010/02/12(金) 04:20:19会社都合の方が条件良いよ。
0300デフォルトの名無しさん
2010/02/12(金) 12:41:440301デフォルトの名無しさん
2010/02/12(金) 12:44:39こいつがどうなろうと俺には全く関係がないし
0302デフォルトの名無しさん
2010/02/12(金) 13:02:10でも、実際、ある日突然新米プログラマーが
「2chであなたのプログラムがおかしいという結論になった」
とか言いがかり付けてきたときのケーススタディにはなると思うよ
0303デフォルトの名無しさん
2010/02/12(金) 13:34:17普通はポインタか参照を渡す
0304デフォルトの名無しさん
2010/02/12(金) 14:27:21できるなら実装で禁止するべきだし、そうでなくてもドキュメントに書いて仕様とする必要はあるだろ
0305デフォルトの名無しさん
2010/02/12(金) 15:13:330306デフォルトの名無しさん
2010/02/12(金) 15:18:510307デフォルトの名無しさん
2010/02/13(土) 05:49:41何らかの暗黙のコピーが発生してるんじゃないかって話じゃないのか?
前提としてないから大丈夫って答えからするとまともにチェックしてなさそうだが
オレも実装で禁止すべきだと思うよ。
他人が誤使用してしまったら終了じゃん
0308デフォルトの名無しさん
2010/02/13(土) 07:22:32他人が誤用しないようコードで抑えるのは当然として、
他人のコードであろうとコードレビューで品質を抑える。
レビューですら抑えられないレベルのバカのコードは黙って捨てる。
まぁそもそも>>1の言っていることだから、本当にSが原因だとは限らないがなw
0309デフォルトの名無しさん
2010/02/13(土) 10:42:570310デフォルトの名無しさん
2010/02/13(土) 10:53:260311デフォルトの名無しさん
2010/02/13(土) 12:58:12代入演算子さえ正しく書けば動くんじゃないの?
0312デフォルトの名無しさん
2010/02/13(土) 23:48:36全メンバを 順次 初期化は基本中の基本
0313デフォルトの名無しさん
2010/02/14(日) 02:18:300314デフォルトの名無しさん
2010/02/14(日) 10:07:13必ずしもそれは使わなくてもクラスに次の3行
private:
A(const A&);
A& operator=(const A&);
を付け加えるか(もちろんAは実際のクラス名に変更)これを継承すれば
コピー不可能になるよ
0315デフォルトの名無しさん
2010/02/15(月) 05:56:260316デフォルトの名無しさん
2010/02/15(月) 11:47:24仕事でboostが必ず使えるとでも思っているのか?
0317デフォルトの名無しさん
2010/02/15(月) 12:08:02>>314だけを入れたクラスをnoncopyableという名前で宣言しておき、
これを継承すればboostと同じ事になるから可読性が下がるという
事はない
0318デフォルトの名無しさん
2010/02/15(月) 12:45:460319デフォルトの名無しさん
2010/02/15(月) 14:21:00boost使えても、普通は>>314。
0320デフォルトの名無しさん
2010/02/16(火) 22:31:58んなこたない。
例えば WebKit では Noncopyable というクラスを自前で用意してそれを使っている。
http://trac.webkit.org/browser/trunk/JavaScriptCore/wtf/Noncopyable.h
0321デフォルトの名無しさん
2010/02/16(火) 23:44:56自前で用意するっていうのか?
0322デフォルトの名無しさん
2010/02/17(水) 08:28:450323デフォルトの名無しさん
2010/02/17(水) 08:30:090324デフォルトの名無しさん
2010/02/17(水) 11:34:53んなことないこたない。
一段階余分なものがあると、それを知らない奴はその内容を調べないとならないだろ。
手間がかかるわけじゃなし、>>314が最良だろ。
0325デフォルトの名無しさん
2010/02/17(水) 17:09:58いつのまにか誰かに修正されちゃうかもしれないだろ。w
0326デフォルトの名無しさん
2010/02/17(水) 17:16:49糞吹いたw
0327デフォルトの名無しさん
2010/02/17(水) 17:19:35C#かJavaを使うべし
0328デフォルトの名無しさん
2010/02/17(水) 20:42:28マジで派遣にそれをやられたことがある。
「事前条件チェックするな!実行したら落ちたろ!」と逆ギレされたこともある。
「constなんて使っているバカは誰だ!コンパイルが通らないだろボケ!!」には参った。
仕組みとして防ぐのがベスト、しかも明示的に書くのが理想だが、残念ながらアホには通じないw
0329デフォルトの名無しさん
2010/02/17(水) 21:01:360330デフォルトの名無しさん
2010/02/18(木) 00:25:53派遣にしろプログラマにしろ
そんな危なっかしいのはとてもじゃないけど雇ってられないな
フレームワークやシステムの思想を独断で破られるとか後が大変だぞ、、
0331デフォルトの名無しさん
2010/02/18(木) 00:43:25Noncopyable という名前を見て意図を察することのできない奴はよっぽどの痴呆
万が一コードを見に行ったとしても20秒で読み終わるぞ
似たようなコード片をあちこちにばら撒くよりはミスの可能性が減るし、やっておいて損はない
0332デフォルトの名無しさん
2010/02/18(木) 11:09:48■ このスレッドは過去ログ倉庫に格納されています