09/01/05 22:53:22
>>796
無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。
>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。
800:デフォルトの名無しさん
09/01/05 22:58:09
>>796
circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?
つか、これってコンパイルできてるの?
801:763
09/01/05 23:05:40
>>799
ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。
802:デフォルトの名無しさん
09/01/05 23:05:48
>>796
だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。
DirectXとか以前に、C言語の基本だぞ。
803:デフォルトの名無しさん
09/01/05 23:10:34
>>801
>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。
>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
n[1000] = 9;
}
int a;
n[a] = 10;
804:デフォルトの名無しさん
09/01/05 23:12:18
>>801
いや、言いたいのは
circleの要素はx0~centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと
805:デフォルトの名無しさん
09/01/05 23:13:58
適当に今サンプルコード書いただけなんじゃね?
普通要素多かったらコンパイル通らんだろ。
806:デフォルトの名無しさん
09/01/05 23:15:32
バグとか以前の問題だな。
807:デフォルトの名無しさん
09/01/05 23:16:56
>>805
>>796の書き方からして、コピペしたんじゃないかと思って。
808:デフォルトの名無しさん
09/01/05 23:20:49
>>802
これが何度も初期化されるような記述だということがまずわかっていませんでした。
externでやってみます。
>>803
ありがとうございます。
ソースを確認してみます。
>>804
すいません、いろいろ弄っている途中だったのでコピペミスってしまいました
ちゃんと8個の値で初期化しても駄目でした。
809:802
09/01/05 23:24:35
>>808
言い方がきつかったが、要は構造体を定義したヘッダファイル内でその変数も宣言・初期化するってことは、
そのヘッダファイルを読み込んだソースファイルの各々について宣言・初期化が行われるだろ?
ヘッダでそういう書き方をしてるってことは、そういうことが起こっているんじゃないかって思ったわけ。
断定的に書いちゃったけど、自分で確かめてみて。
810:デフォルトの名無しさん
09/01/05 23:33:03
>>809
なるほど。確かめてみます。
助言ありがとうございました。
811:763
09/01/06 00:24:28
原因が見つかりました。
宣言した配列の大きさ以上の領域を弄っていたようです。
そこを直したところ解決しました。
みなさんありがとうございました。助かりました。
812:デフォルトの名無しさん
09/01/06 00:43:17
こちらで質問させて頂きます。
5年ほど、ACCESSのVBAでOracleやMySQLのDB操作を行い、
生産管理ツールなどを作成してきました。
そろそろ、C言語にも手を出してみようと思い、現在
C++Bilderか、VC++のどちらにしようか迷っています。
やりたいことは、ACCESSで言うフォーム上からDBのデータを表示したり、
進捗を入力したりしたいと思っています。
雑な質問で恐縮なのですが、C++Bilder2009とVC++では
どちらがとっつきやすいでしょうか?
813:デフォルトの名無しさん
09/01/06 00:50:03
>>812
Bilderじゃね?
814:813
09/01/06 00:50:55
>>813
Bilder?
Builderのことだな。
815:812
09/01/06 00:59:41
すいません。Builderでしたね。。。
確かに、SQLServer使ってるわけでもないので、
VC++である必要もなさそうですね。
816:デフォルトの名無しさん
09/01/06 01:16:10
「プログラマーは報酬さえ得ることが出来ればどんな事でもするって言うのか!」
817:デフォルトの名無しさん
09/01/06 01:27:03
>>816
便所でも掃除する
818:デフォルトの名無しさん
09/01/06 01:27:51
>>817
舌で
819:デフォルトの名無しさん
09/01/06 01:30:23
>>818
報酬による
820:デフォルトの名無しさん
09/01/06 06:00:40
>>819
URLリンク(ecx.images-amazon.com)
君の報酬はコレだ
働いてくれるな?
821:デフォルトの名無しさん
09/01/06 06:08:19
>>820
実は表紙だけで、中身は普通のJIS X3010なんだろ?
822:デフォルトの名無しさん
09/01/06 06:11:07
そっちのほうがよっぽどほしいわww
823:デフォルトの名無しさん
09/01/06 06:33:57
>>821
それ、むしろ欲しいよ!
824:デフォルトの名無しさん
09/01/06 11:16:19
なんでC言語なんて覚えてんだろ・・?
825:デフォルトの名無しさん
09/01/06 12:45:28
2chブラウザ作りたいんですが、
他の2chブラウザって、書き込み処理とかは、ここのフォームを偽装して作ってるんですか?
826:825
09/01/06 12:48:43
スレリンク(tech板)
ここに、
20 :デフォルトの名無しさん:2007/06/10(日) 21:26:21
まじめな話DATをダウンロードして表示して保管して
書き込みはbbs.cgiを呼んでやるだけでしょ大雑把に言って
って書いてましたが、そうなんですか?
827:デフォルトの名無しさん
09/01/06 13:03:52
>>826
基本、そんな感じ。それにプラスするとしたら、画像表示、検索、あぼん、コテ管理、DAT管理、書き込み管理と言ったところか。
書き込みフォームは偽装するよりもオリジナルで作った方が使い易いと思われ。
あー、Cookieの管理とか板トップ表示なんかも必要か。
828:デフォルトの名無しさん
09/01/06 13:06:43
>>825
こっちのほうが詳しいぞ。
スレリンク(tech板)
829:デフォルトの名無しさん
09/01/06 13:23:18
暇でライブラリでも作ろうかと思ってるんで何かお題ください
830:デフォルトの名無しさん
09/01/06 13:26:49
>>829
Cでスパイダーツール書くのに使えるヤツ
831:デフォルトの名無しさん
09/01/06 13:28:54
スパイダーツールって何?
832:デフォルトの名無しさん
09/01/06 13:33:25
>>831
こんな
URLリンク(www.amazon.co.jp)
833:デフォルトの名無しさん
09/01/06 13:52:48
なるほど
あんまり興味ないけど作って見ます
834:デフォルトの名無しさん
09/01/06 22:25:03
デバッグ作業でよく発見する間違いってどんなのでしょうか?
835:デフォルトの名無しさん
09/01/06 22:34:20
>>834
コーディング段階で発見できない間違いの殆ど全て。
836:デフォルトの名無しさん
09/01/06 22:42:28
どういうのが発見できないのでしょうか?
837:デフォルトの名無しさん
09/01/06 22:43:50
というか全部発見しようとするのがデバッグってもんじゃないかww
838:デフォルトの名無しさん
09/01/06 22:45:50
仕様の誤解釈、typo、不注意、思い込み、&c...
839:デフォルトの名無しさん
09/01/06 23:06:11
デバッガのバグとかも
840:デフォルトの名無しさん
09/01/06 23:57:59
>>834
配列とかポインタでアクセスしたらいけないところにアクセスしてるのが多い
841:デフォルトの名無しさん
09/01/07 01:35:17
C++(gcc4.1.2使っています)で、
下記のJAVAのように、
メソッド内で同一クラス内のメソッドを利用するにはどうしたらよいのでしょうか。
public class Greeting
{
public void sayHello()
{
this.hello();
}
private void hello()
{
System.out.println("Hello");
}
}
842:デフォルトの名無しさん
09/01/07 01:37:40
this->hello();}
843:デフォルトの名無しさん
09/01/07 01:43:30
>>842
できました。ありがとうございます。
844:デフォルトの名無しさん
09/01/07 10:19:30
質問です( VC++ 2008EE )
クラステンプレート使用時、staticなconstメンバ変数の定義でエラーになってしまいます。
<ヘッダー>
template <typename T>
class samp{
private:
T number;
static const double db;
public:
...
void disp() const { std::cout << "db = " << db << std::endl; }
};
<cpp>
template <typename T>
const double samp<T>::db = 1.35;
このクラスのオブジェクトを生成して disp() をコールすると
db の外部参照が未解決と出てしまいます。
どう修正すべきでしょうか?
845:デフォルトの名無しさん
09/01/07 10:29:20
定義が無いもの、定義書けばいいだろ
846:デフォルトの名無しさん
09/01/07 10:43:00
VS2008で問題出ないけどなあ、それ。
847:844
09/01/07 11:00:00
>>845
<cpp>での定義の事でしょうか?
const double samp<int>::db = 1.35;
const double samp<char>::db = 1.35;
とかやれば通るんですがテンプレートの意味ないですよね・・・
>>846
マジですか?!
クラスの宣言と定義だけなら通るんですが、main にて
samp<int> smp;
smp.disp(); // ここでエラー
になってしまいます