スレを勃てるまでもないC/C++の質問はここで 5
■ このスレッドは過去ログ倉庫に格納されています
過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
0797デフォルトの名無しさん
2009/01/05(月) 22:44:47君には早すぎるってのがわからんかな
ここで説明したところで理解できないよ
0と0000000000000000は同じ
0001000000000000と1000000000000も同じ
0798デフォルトの名無しさん
2009/01/05(月) 22:45:51普段 10 進数で 123 とか 372 とか言ってるけど、
それより上の桁は、実際には全て 0 で埋められているけど
単に省略して表現しているに過ぎない。
0799デフォルトの名無しさん
2009/01/05(月) 22:53:22無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。
>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。
0800デフォルトの名無しさん
2009/01/05(月) 22:58:09circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?
つか、これってコンパイルできてるの?
0801763
2009/01/05(月) 23:05:40ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。
0802デフォルトの名無しさん
2009/01/05(月) 23:05:48だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。
DirectXとか以前に、C言語の基本だぞ。
0803デフォルトの名無しさん
2009/01/05(月) 23:10:34>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。
>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
n[1000] = 9;
}
int a;
n[a] = 10;
0804デフォルトの名無しさん
2009/01/05(月) 23:12:18いや、言いたいのは
circleの要素はx0〜centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと
0805デフォルトの名無しさん
2009/01/05(月) 23:13:58普通要素多かったらコンパイル通らんだろ。
0806デフォルトの名無しさん
2009/01/05(月) 23:15:320807デフォルトの名無しさん
2009/01/05(月) 23:16:56>>796の書き方からして、コピペしたんじゃないかと思って。
0808デフォルトの名無しさん
2009/01/05(月) 23:20:49これが何度も初期化されるような記述だということがまずわかっていませんでした。
externでやってみます。
>>803
ありがとうございます。
ソースを確認してみます。
>>804
すいません、いろいろ弄っている途中だったのでコピペミスってしまいました
ちゃんと8個の値で初期化しても駄目でした。
0809802
2009/01/05(月) 23:24:35言い方がきつかったが、要は構造体を定義したヘッダファイル内でその変数も宣言・初期化するってことは、
そのヘッダファイルを読み込んだソースファイルの各々について宣言・初期化が行われるだろ?
ヘッダでそういう書き方をしてるってことは、そういうことが起こっているんじゃないかって思ったわけ。
断定的に書いちゃったけど、自分で確かめてみて。
0810デフォルトの名無しさん
2009/01/05(月) 23:33:03なるほど。確かめてみます。
助言ありがとうございました。
0811763
2009/01/06(火) 00:24:28宣言した配列の大きさ以上の領域を弄っていたようです。
そこを直したところ解決しました。
みなさんありがとうございました。助かりました。
0812デフォルトの名無しさん
2009/01/06(火) 00:43:175年ほど、ACCESSのVBAでOracleやMySQLのDB操作を行い、
生産管理ツールなどを作成してきました。
そろそろ、C言語にも手を出してみようと思い、現在
C++Bilderか、VC++のどちらにしようか迷っています。
やりたいことは、ACCESSで言うフォーム上からDBのデータを表示したり、
進捗を入力したりしたいと思っています。
雑な質問で恐縮なのですが、C++Bilder2009とVC++では
どちらがとっつきやすいでしょうか?
0813デフォルトの名無しさん
2009/01/06(火) 00:50:03Bilderじゃね?
0815812
2009/01/06(火) 00:59:41確かに、SQLServer使ってるわけでもないので、
VC++である必要もなさそうですね。
0816デフォルトの名無しさん
2009/01/06(火) 01:16:100817デフォルトの名無しさん
2009/01/06(火) 01:27:03便所でも掃除する
0818デフォルトの名無しさん
2009/01/06(火) 01:27:51舌で
0819デフォルトの名無しさん
2009/01/06(火) 01:30:23報酬による
0820デフォルトの名無しさん
2009/01/06(火) 06:00:40http://ecx.images-amazon.com/images/I/5102gOf6cgL._SS500_.jpg
君の報酬はコレだ
働いてくれるな?
0821デフォルトの名無しさん
2009/01/06(火) 06:08:19実は表紙だけで、中身は普通のJIS X3010なんだろ?
0822デフォルトの名無しさん
2009/01/06(火) 06:11:070823デフォルトの名無しさん
2009/01/06(火) 06:33:57それ、むしろ欲しいよ!
0824デフォルトの名無しさん
2009/01/06(火) 11:16:190825デフォルトの名無しさん
2009/01/06(火) 12:45:28他の2chブラウザって、書き込み処理とかは、ここのフォームを偽装して作ってるんですか?
0826825
2009/01/06(火) 12:48:43ここに、
20 :デフォルトの名無しさん:2007/06/10(日) 21:26:21
まじめな話DATをダウンロードして表示して保管して
書き込みはbbs.cgiを呼んでやるだけでしょ大雑把に言って
って書いてましたが、そうなんですか?
0827デフォルトの名無しさん
2009/01/06(火) 13:03:52基本、そんな感じ。それにプラスするとしたら、画像表示、検索、あぼん、コテ管理、DAT管理、書き込み管理と言ったところか。
書き込みフォームは偽装するよりもオリジナルで作った方が使い易いと思われ。
あー、Cookieの管理とか板トップ表示なんかも必要か。
0828デフォルトの名無しさん
2009/01/06(火) 13:06:43こっちのほうが詳しいぞ。
http://pc11.2ch.net/test/read.cgi/tech/1224449899/
0829デフォルトの名無しさん
2009/01/06(火) 13:23:180830デフォルトの名無しさん
2009/01/06(火) 13:26:49Cでスパイダーツール書くのに使えるヤツ
0831デフォルトの名無しさん
2009/01/06(火) 13:28:540832デフォルトの名無しさん
2009/01/06(火) 13:33:25こんな
http://www.amazon.co.jp/dp/4873111870
0833デフォルトの名無しさん
2009/01/06(火) 13:52:48あんまり興味ないけど作って見ます
0834デフォルトの名無しさん
2009/01/06(火) 22:25:030835デフォルトの名無しさん
2009/01/06(火) 22:34:20コーディング段階で発見できない間違いの殆ど全て。
0836デフォルトの名無しさん
2009/01/06(火) 22:42:280837デフォルトの名無しさん
2009/01/06(火) 22:43:500838デフォルトの名無しさん
2009/01/06(火) 22:45:500839デフォルトの名無しさん
2009/01/06(火) 23:06:110840デフォルトの名無しさん
2009/01/06(火) 23:57:59配列とかポインタでアクセスしたらいけないところにアクセスしてるのが多い
0841デフォルトの名無しさん
2009/01/07(水) 01:35:17下記のJAVAのように、
メソッド内で同一クラス内のメソッドを利用するにはどうしたらよいのでしょうか。
public class Greeting
{
public void sayHello()
{
this.hello();
}
private void hello()
{
System.out.println("Hello");
}
}
0842デフォルトの名無しさん
2009/01/07(水) 01:37:400843デフォルトの名無しさん
2009/01/07(水) 01:43:30できました。ありがとうございます。
0844デフォルトの名無しさん
2009/01/07(水) 10:19:30クラステンプレート使用時、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 の外部参照が未解決と出てしまいます。
どう修正すべきでしょうか?
0845デフォルトの名無しさん
2009/01/07(水) 10:29:200846デフォルトの名無しさん
2009/01/07(水) 10:43:000847844
2009/01/07(水) 11:00:00<cpp>での定義の事でしょうか?
const double samp<int>::db = 1.35;
const double samp<char>::db = 1.35;
とかやれば通るんですがテンプレートの意味ないですよね・・・
>>846
マジですか?!
クラスの宣言と定義だけなら通るんですが、main にて
samp<int> smp;
smp.disp(); // ここでエラー
になってしまいます
0848デフォルトの名無しさん
2009/01/07(水) 12:18:01>とかやれば通るんですが
でも必要。
0849デフォルトの名無しさん
2009/01/07(水) 12:22:43で通るけどな、EEとProの違い?SP1だけど。
0850デフォルトの名無しさん
2009/01/07(水) 12:29:420851849
2009/01/07(水) 12:43:05一応書いとくけど、通ったというのは
samp<float> hage;
hage.disp();
samp<int> *hoge = new samp<int>();
hoge->disp();
delete hoge;
で実行してのことだからな。
0852844
2009/01/07(水) 13:04:33template の場合、ヘッダで定義しないとまずい事を失念しておりました。
cppファイルでなく、ヘッダで
template <typename T>
const double Samp<T>::db = 1.35;
と定義する事で解決しました。 お騒がせいたしましたm(_ _)m
0853デフォルトの名無しさん
2009/01/07(水) 13:49:310854デフォルトの名無しさん
2009/01/07(水) 14:05:130855デフォルトの名無しさん
2009/01/07(水) 14:47:04float *y,nb;
y = &nb;
printf("実数を入力\n");
scanf("%f",&y)
printf("%f",*y);
と書いたらセグメンテーション違反と言われてしまったのですが、恥ずかしながら何故そうなのか解りません。
ご教示お願いします。
0856デフォルトの名無しさん
2009/01/07(水) 14:53:41float *y,nb;
y = &nb;
printf("実数を入力\n");
scanf("%f",&y);
printf("%f",*y);
0857デフォルトの名無しさん
2009/01/07(水) 14:55:03- scanf("%f",&y);
+ scanf("%f",y);
0858デフォルトの名無しさん
2009/01/07(水) 14:57:58×セグメンテーション違反と言われてしまったのですが〜
○入力した値が表示されないのですが〜
何度もすみません。。
0859デフォルトの名無しさん
2009/01/07(水) 15:10:34>>857
0861デフォルトの名無しさん
2009/01/07(水) 17:03:470862デフォルトの名無しさん
2009/01/07(水) 18:44:340863デフォルトの名無しさん
2009/01/07(水) 18:58:520864デフォルトの名無しさん
2009/01/07(水) 19:22:500865デフォルトの名無しさん
2009/01/07(水) 19:48:130866デフォルトの名無しさん
2009/01/07(水) 19:51:17using namespace std;
void rensyuu();
int main()
{
rensyuu();
return 0;
}
void rensyuu()
{
int tensuu[] = {
12,78,100,43,56,87,29,60,43,52,
51,67,89,03,50,68,99,94,81,10,
22,55
};
int i;
for(i = 0; i < 22; i++ );
{
cout<<"出席番号"<<i<<"は"<<tensuu[i]<<"点です"<<endl;
}
}
エラーとかは出ませんが
出席番号22は-858993460点です
と、なってしまいます・・・
自分が思うようになってくれません
どこが間違っているんでしょう・・・???
0867デフォルトの名無しさん
2009/01/07(水) 19:51:49複数のソースファイルがあります。
main.c
├sub.c
inter.c
└ter2.c
みたいにあったとして、これをコンパイルするとひとつの実行ファイルになります。
どういう風にコードを組めば、ひとつの実行ファイルとしてコンパイルされるのでしょうか?
簡単なCのソースファイルしか書いたことなく何百行や何個もあるファイルからなるプログラムを作ったことないので
よくわからないので、よろしくおねがいします。
0868デフォルトの名無しさん
2009/01/07(水) 19:54:39なんで一つの実行ファイルになってるのか理解できないってことか?
0869だけじゃないけど敢えて伏せてみる
2009/01/07(水) 19:54:56自分で数えるからいけない。
int i;
for(i = 0; i < 22; i++ );
を
for (int i = 0; i < sizeof(tensuu) / sizeof(* tensuu); ++i)
に変えてご覧。
0870デフォルトの名無しさん
2009/01/07(水) 19:56:24ありがとうございます!!
0871デフォルトの名無しさん
2009/01/07(水) 20:12:13はい、そうです。
普通は1つのファイルをコンパイルしたらひとつの実行ファイルですよね。
普通はっていうか、Cを学び始めたころ思うには。
2つ3つのファイルになってコンパイルすると1つの実行ファイルになりますよね。(そう設定したらとは思いますが)
これらのファイルはお互いに参照?してるから自動的に一つの実行ファイルになるのかな?
main関数を含むファイルを中心にしてひとつの実行ファイルを仕上げるのでしょうか?
0872デフォルトの名無しさん
2009/01/07(水) 20:33:26一応、main.cで他のファイルを全て
#include "xxxx.c"
すれば動くことには動くよ。
ただ最終的には分割コンパイルに慣れるべきだな。
各ファイルに対応するヘッダファイルを書くことになる。
覚えることが多いので詳しくは分割コンパイルで調べてくれ。
0873デフォルトの名無しさん
2009/01/07(水) 20:34:35>これらのファイルはお互いに参照?してるから自動的に一つの実行ファイルになるのかな?
VisualC++みたいな統合環境だと、プロジェクトの設定や登録されたソースなどから
コンパイラやリンカへの指示を自動でしてくれる。
自分でするなら、必要なソースをコンパイルし、それらと適切なライブラリをリンカに渡して実行ファイルに纏め上げる。
0874デフォルトの名無しさん
2009/01/07(水) 20:51:52大きなというか複数にわたるソースをみたことありますが、
見たやつはincludeはしてなかった気がします。
includeでもmainプログラムにそのファイルを取り込むってことだけど
その場合はファイルを結合っていう感じではなく、一部分をmainを取り込むみたいな感じですよね
0875デフォルトの名無しさん
2009/01/07(水) 21:24:50特に static マジでヤバイ
static にふたつの意味がある
全然関係ないのに同じ static で書くから
初心者は混乱しまくる超やばい
0876デフォルトの名無しさん
2009/01/07(水) 21:26:37include 無くてもリンクすればひとつになる
プロトタイプ宣言がありさえすればいい
0877デフォルトの名無しさん
2009/01/07(水) 21:28:16共通のはまとめて *.h に書いて include するようになったんだと
0878デフォルトの名無しさん
2009/01/07(水) 21:29:14互いに関連性のないソースでもひとつになるということかな
だったら1つにしてしまったら、どっちかは機能しないのでは
0879デフォルトの名無しさん
2009/01/07(水) 21:32:14--------
int hoge(int hoge){
return hoge;
}
--------
fuga.c
--------
int hoge(int);
int main(){
printf("%d", hoge(123));
}
--------
これで include なしでリンクすると
fuga.exe ひとつだけにできる
0880デフォルトの名無しさん
2009/01/07(水) 21:38:40>何をプロトタイプ宣言すればよいのでしょうか?
共通に使いたいもの
>互いに関連性のないソースでもひとつになるということかな
互いに関連性のないソースをひとつにする意味があるのか?
(強いて言えばライブラリ作るとそうなることがあるけどその場合でも無関係のはあまり混ぜない)
>だったら1つにしてしまったら、どっちかは機能しないのでは
両方のソースで static になってるとそれぞれがそれぞれのソース内でのみ機能する
0881デフォルトの名無しさん
2009/01/07(水) 21:40:27だからC++は無名名前空間を取り入れたんだな。
0882デフォルトの名無しさん
2009/01/07(水) 21:45:19ポインタよりやばい罠
ポインタで躓くなんて言ってる香具師はたいしたことない
0883デフォルトの名無しさん
2009/01/07(水) 22:48:25スコープの方は別の単語にして欲しいよなぁ。(externの対義語はinternか?)
なんでこうなんだろ。
0884デフォルトの名無しさん
2009/01/07(水) 22:58:430885デフォルトの名無しさん
2009/01/07(水) 23:16:33勉強不足なだけだ
あれは別にスコープのためにあるんじゃない
0886デフォルトの名無しさん
2009/01/07(水) 23:57:39だけで充分な気がするのですが
ここに「static つけたもの」が入ってくると訳がわかりません
スコープのため意外になにがあるんでしょう
0887デフォルトの名無しさん
2009/01/08(木) 00:01:32--------
int hoge=10;
--------
fuga.c
--------
extern int hoge;
--------
hage.c
--------
int hoge;
--------
hige.c
--------
static int hoge=20;
--------
main.c
--------
extern int hoge;
int main(){
printf("%d", hoge);
}
--------
0888デフォルトの名無しさん
2009/01/08(木) 00:02:18--------
int hoge=10;
--------
fuga.c
--------
extern int hoge;
--------
hage.c
--------
int hoge;
--------
main.c
--------
static int hoge=20;
extern int hoge;
int main(){
printf("%d", hoge);
}
--------
0889デフォルトの名無しさん
2009/01/08(木) 00:06:11普通は外部に公開するので
むしろ extern なんてものの方がいらんだろ。
実際関数では extern なんてものは使わない。
変数は、宣言と定義を区別できないので extern が必要になるが。
0890デフォルトの名無しさん
2009/01/08(木) 00:08:43関数外に書かれたらファイルスコープで、
ブロック内に書かれたらブロックスコープになるだけで。
0891デフォルトの名無しさん
2009/01/08(木) 00:56:46実体を静的に解決するためにstaticがある
結果的に外部から実行時参照が出来なくなるだけ
0892デフォルトの名無しさん
2009/01/08(木) 03:09:56(.text+0x9a):undefined reference to `_getline'
collect2: ld returned 1 exit status
上のような警告が出て通らない。環境はCygwinでgcc3.4.4
libc 4.6.27以降にgetlineが入ってるみたいなんだけど、その情報をどう利用していいのかわからん
インストールのパッケージにありそうだと思って探したけどそれらしき物が見つからず途方にくれてる
includeし忘れとかそういう初歩的なミスはしてないつもり。
助けてください><
0893デフォルトの名無しさん
2009/01/08(木) 03:22:30それだけの情報ではぼくもわかりません><
せめてソースを晒してください><
0894デフォルトの名無しさん
2009/01/08(木) 07:00:14#include<stdio.h>
main{
printf....
}
みたいに
実際これをコンパイルするとなると、ライブラリ?も関係してくるのでしょうか?
stdio.hにかかれているものをライブラリからとりこんでくる?
開発環境のソフトつかってると、ソースファイルやヘッダファイルとは別にライブラリファイルも用意されてて
コンパイルするみたいなのですが、このときのライブラリファイルがよくわかりません。
普通にソースファイル単体をgccなりでコンパイルするとこのライブラリってファイルがないので疑問におもいました
0895デフォルトの名無しさん
2009/01/08(木) 07:44:58有名な例外は、unix系の場合のmathライブラリ。
0896デフォルトの名無しさん
2009/01/08(木) 08:06:22-lナントカでライブラリを指定してちょうだいということ。
■ このスレッドは過去ログ倉庫に格納されています