エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
564デフォルトの名無しさん
2018/10/26(金) 16:36:40.82ID:8hqqerJ0 >>562
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら
warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら
warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
565デフォルトの名無しさん
2018/10/26(金) 16:37:20.12ID:8hqqerJ0 あとグローバルにしなくても
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
566デフォルトの名無しさん
2018/10/28(日) 23:19:51.00ID:CM0THx8+ 複数のファイルをコンパイルするとき、ソースファイルの読み込み順番ってc++ではどのように決定されるのでしょうか?
567はちみつ餃子 ◆8X2XSCHEME
2018/10/28(日) 23:35:05.21ID:oH4yrJrN 読込み順番ってのが何を言おうとしているのかよくわからんぞ。
568デフォルトの名無しさん
2018/10/29(月) 00:15:12.84ID:LkYf8yJz569はちみつ餃子 ◆8X2XSCHEME
2018/10/29(月) 01:17:32.57ID:wGJRVi/I 先に読み込ませれば (ヘッダを include したり宣言を書いたりしなくても) 定義したものが利用可能になると思ったってことなのかな?
570デフォルトの名無しさん
2018/10/29(月) 11:30:00.64ID:VxCr7qKV ならんやろ
571デフォルトの名無しさん
2018/10/29(月) 12:50:50.62ID:X5D3cySa ソースファイルの読み込み=ソースのコンパイルとして
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
>>571
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順
別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順
別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
573デフォルトの名無しさん
2018/10/29(月) 19:53:08.30ID:QH06ucqh574デフォルトの名無しさん
2018/10/29(月) 19:59:30.68ID:+o2CKGU+ vectorで複数のstd::stringの各要素を収納して管理してみたいのですが、
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";
std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー
vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";
std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー
vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
575デフォルトの名無しさん
2018/10/29(月) 20:43:24.49ID:b4sCrQ/m >>574
booktitle.push_back(A);
booktitle.push_back(A);
>>573
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
577デフォルトの名無しさん
2018/10/29(月) 21:00:10.54ID:+o2CKGU+ >>575
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
578デフォルトの名無しさん
2018/10/29(月) 21:54:36.97ID:b4sCrQ/m579デフォルトの名無しさん
2018/10/29(月) 22:57:36.19ID:oZEcP9DN580デフォルトの名無しさん
2018/10/29(月) 23:25:38.01ID:Id14AobK 関数の中でポインタ変数を作ったら、その関数から出る時、ポインタ変数は消えるけど、ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
581デフォルトの名無しさん
2018/10/29(月) 23:52:04.87ID:JGxixszg そのとおり
記録には残らないが記憶に残る
記録には残らないが記憶に残る
582デフォルトの名無しさん
2018/10/30(火) 00:19:02.74ID:tYtIFLkW ありがとう。すみませんもう一つ。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
583デフォルトの名無しさん
2018/10/30(火) 00:27:02.34ID:Md8WzUxK それは、32ビット浮動小数点のビットパターンを32ビットintに入れておけば
float型とかいらないと言ってるようなもの
float型とかいらないと言ってるようなもの
584デフォルトの名無しさん
2018/10/30(火) 00:36:21.09ID:H/liFP07 アドレス値がほしいとき
引数でアドレス入れる変数のアドレスを渡すことがある
引数でアドレス入れる変数のアドレスを渡すことがある
585デフォルトの名無しさん
2018/10/30(火) 00:46:04.26ID:0KkuIlNz >>582
情報量としては実際のところメモリアドレスなので同じだけれど型が違う
pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる
上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う
例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
情報量としては実際のところメモリアドレスなので同じだけれど型が違う
pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる
上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う
例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
586デフォルトの名無しさん
2018/10/30(火) 00:55:27.51ID:H/liFP07 アドレス渡さないと変数(今回の場合アドレスを格納する領域)に値を格納できない
コレはどんな変数でも同じ
アドレスを格納する変数もただの変数だからな
コレはどんな変数でも同じ
アドレスを格納する変数もただの変数だからな
587デフォルトの名無しさん
2018/10/30(火) 07:33:46.97ID:rZekkOWs588デフォルトの名無しさん
2018/10/30(火) 12:09:39.01ID:yVkeMr3S 「戻り値ではなく、引数の書き換えで呼び出し元に新たな値を渡したい」
・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
関数実装の際 *でデリファレンスして代入
・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
関数実装の際 そのまま代入
・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
関数実装の際 *でデリファレンスして代入
・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
関数実装の際 そのまま代入
589デフォルトの名無しさん
2018/10/30(火) 15:15:26.58ID:p4LrBCE7 >>582
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
590デフォルトの名無しさん
2018/10/30(火) 15:17:35.76ID:p4LrBCE7 あと二重ポインタとかダブルポインタとかいう用語は使わない方が良い
ポインタのポインタ(たまにポインタの配列)
配列のポインタ
のどっちかにしろ
ポインタのポインタ(たまにポインタの配列)
配列のポインタ
のどっちかにしろ
591デフォルトの名無しさん
2018/10/30(火) 15:22:49.70ID:yVkeMr3S void my_free(void** ptr) { free(*ptr); *ptr = NULL; }
.......
char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
.......
char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
592デフォルトの名無しさん
2018/10/30(火) 15:59:22.21ID:KCmKruF1 ポインタほんとむずい
593デフォルトの名無しさん
2018/10/30(火) 16:02:47.46ID:QNssPyY0 わからないときは図に描いて整理
594デフォルトの名無しさん
2018/10/30(火) 16:08:12.80ID:Id9/5UCV595デフォルトの名無しさん
2018/10/30(火) 18:50:51.23ID:rAbIHznq >>594
char pointer と double pointer が並んでも?
char pointer と double pointer が並んでも?
596デフォルトの名無しさん
2018/10/30(火) 21:19:57.26ID:4lskY4LV 自分がそう呼ぶかどうかはともかくとして、
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
597デフォルトの名無しさん
2018/10/30(火) 21:22:07.40ID:ri95Blut **ダブル ***トリプル ****クアドラプル?
うーん
うーん
598デフォルトの名無しさん
2018/10/30(火) 21:37:01.52ID:zgde8yLC それを外人のプログラマに説明して通じるかどうか
599デフォルトの名無しさん
2018/10/30(火) 21:46:50.04ID:QNssPyY0 使うのはポインタのポインタまでにしとかないと書いててワケわからなくなるぞ
600デフォルトの名無しさん
2018/10/30(火) 21:51:59.77ID:ri95Blut 素朴な疑問だけど、ビット演算の | と論理演算の ||
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
602デフォルトの名無しさん
2018/10/30(火) 22:05:37.02ID:ri95Blut ダブルポインタの流れで気になったのよね
言葉だけの疎通で どう言ってたかな?と
※ 「ビットor」 「or」 後者は前後の文意で汲んでくれ のような使い方してるわ
言葉だけの疎通で どう言ってたかな?と
※ 「ビットor」 「or」 後者は前後の文意で汲んでくれ のような使い方してるわ
603デフォルトの名無しさん
2018/10/30(火) 22:10:43.59ID:4lskY4LV 明示的にビット毎のorを指すときは bitwise or と書くけど日本語ではなんていうんだ
教科書なら「ビット毎の論理和」でいいんだろうけど古臭い
声に出して読むときは2つ組みの方をオアオアとかアンドアンド
教科書なら「ビット毎の論理和」でいいんだろうけど古臭い
声に出して読むときは2つ組みの方をオアオアとかアンドアンド
604さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/10/30(火) 22:17:49.01ID:NmwiF06a doubled pointerだよ。dがつく。
605デフォルトの名無しさん
2018/10/30(火) 22:30:53.82ID:4lskY4LV606さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/10/30(火) 22:34:37.41ID:NmwiF06a 自分の頭がおかしいので休憩します。
607デフォルトの名無しさん
2018/10/30(火) 22:43:13.11ID:J31Dj26+ double linked list のdoubleは行きのポインタ(リンク)と帰りのポインタでdoubleだし
日本語より論理的と言われがちな英語も割といい加減だよね
日本語では双方向リストと実に論理的な呼称
日本語より論理的と言われがちな英語も割といい加減だよね
日本語では双方向リストと実に論理的な呼称
608デフォルトの名無しさん
2018/10/30(火) 22:47:46.33ID:fzlT+aGo いや double pointer, triple pointer と増やしていけるし数学的なのかな
これ式で日本語でたまに使われるのは2重(2段)ポインタ、3重ポインタか
これ式で日本語でたまに使われるのは2重(2段)ポインタ、3重ポインタか
609デフォルトの名無しさん
2018/10/30(火) 23:00:20.94ID:yt1zemAy >>598
むしろ英語圏の人のほうがよく使ってる
むしろ英語圏の人のほうがよく使ってる
610はちみつ餃子 ◆8X2XSCHEME
2018/10/30(火) 23:08:47.77ID:/tj4m1Wy >>603
JIS だと「ビット単位のOR演算子」と「論理OR演算子」と書かれている。
あくまで訳語のひとつでしかないけど、JIS の性格を考えれば公式訳と言ってよかろ。
| と || の代替表記として bitor と or があるので、発音するときはこれでいくのもアリかもね。
JIS だと「ビット単位のOR演算子」と「論理OR演算子」と書かれている。
あくまで訳語のひとつでしかないけど、JIS の性格を考えれば公式訳と言ってよかろ。
| と || の代替表記として bitor と or があるので、発音するときはこれでいくのもアリかもね。
611デフォルトの名無しさん
2018/10/30(火) 23:13:11.59ID:VN5Yl689 二重ポインタを思わず「ハンドル」と言ってしまって怪訝な顔をされる俺。
612はちみつ餃子 ◆8X2XSCHEME
2018/10/30(火) 23:23:20.21ID:/tj4m1Wy C99 をざっと見た感じでは double を指すポインタは "pointer to double" という書き方になっているけど、
カジュアルな場面で double pointer と言わないとも言い切れないだろうし、
これについては >>595 の言い分に説得力を感じる。
英語がよくわかる人の肌感覚ではどんなもんなんやろね?
カジュアルな場面で double pointer と言わないとも言い切れないだろうし、
これについては >>595 の言い分に説得力を感じる。
英語がよくわかる人の肌感覚ではどんなもんなんやろね?
613デフォルトの名無しさん
2018/10/30(火) 23:38:22.13ID:EION13qU ポインタへのポインタでしかないもんを
ダブルポインタと言い換えるの気味悪い
ダブルポインタと言い換えるの気味悪い
614デフォルトの名無しさん
2018/10/30(火) 23:42:13.26ID:H/liFP07 だからな
ただの変数だからな
ただのポインタも例外じゃない
ただの変数だからな
ただのポインタも例外じゃない
615デフォルトの名無しさん
2018/10/31(水) 00:07:15.80ID:Y0YI6J+Y >>607
doubly linked list じゃね?
https://books.google.com/ngrams/graph?content=double+linked+list%2Cdoubly+linked+list&case_insensitive=on&year_start=1800&year_end=2008&corpus=15&smoothing=3
doubly linked list じゃね?
https://books.google.com/ngrams/graph?content=double+linked+list%2Cdoubly+linked+list&case_insensitive=on&year_start=1800&year_end=2008&corpus=15&smoothing=3
616デフォルトの名無しさん
2018/10/31(水) 07:22:13.82ID:NyWYateD >>613
お前さんの感覚なんてどうでもいい
pointer to pointer c でググると
Double Pointer (Pointer to Pointer) in C
https://www.geeksforgeeks.org/double-pointer-pointer-pointer-c/
が最初に出て来る現実を見なよ
お前さんの感覚なんてどうでもいい
pointer to pointer c でググると
Double Pointer (Pointer to Pointer) in C
https://www.geeksforgeeks.org/double-pointer-pointer-pointer-c/
が最初に出て来る現実を見なよ
617デフォルトの名無しさん
2018/10/31(水) 13:47:07.97ID:XAA9QXm2 悪貨は良貨を駆逐する
618デフォルトの名無しさん
2018/11/01(木) 05:49:53.11ID:G1B9TB4r おまえら、本当の0からの初心者にも、やさしくしろよな。
619デフォルトの名無しさん
2018/11/01(木) 11:03:26.87ID:z733lC2q 初心者だから何でも許されるというのは間違った考え
安田はジャーナリストとしては初心者
無能に仕事を任せるのは損失
安田はジャーナリストとしては初心者
無能に仕事を任せるのは損失
620デフォルトの名無しさん
2018/11/01(木) 11:45:07.51ID:JcPwSOae むしろ無能を起用した側の責任も
ジャーナリストは自己だが
ジャーナリストは自己だが
621デフォルトの名無しさん
2018/11/01(木) 19:27:13.53ID:8DVitDyR >>619
そういうお前が一番の初心者じゃねえのかw
そういうお前が一番の初心者じゃねえのかw
622デフォルトの名無しさん
2018/11/01(木) 22:02:58.74ID:ydgxPLcy プログラム全体でただ1つだけ走らせることが出来る、ある機能を提供するライブラリを作りたいんですけど
シングルトンで実装するのが一般的なんですかね よくわからん
シングルトンで実装するのが一般的なんですかね よくわからん
623デフォルトの名無しさん
2018/11/01(木) 23:40:18.35ID:BwvtJmQs それただのcの関数やんけ
staticのメンバ関数で十分
staticのメンバ関数で十分
624デフォルトの名無しさん
2018/11/02(金) 00:29:41.77ID:Jt96ZoUI スレッドの数なのか変数の数なのか
なんでライブラリがそんなことを強制せにゃならんのか
なんでライブラリがそんなことを強制せにゃならんのか
625デフォルトの名無しさん
2018/11/02(金) 00:36:09.11ID:4QeJVSF3 よくわからん状態で作って、システム停止状態になる予感
626デフォルトの名無しさん
2018/11/02(金) 00:38:05.60ID:KoqyjIsr リエントラントな関数にしとけば平気
628デフォルトの名無しさん
2018/11/02(金) 09:42:25.75ID:4QeJVSF3 未来から来た男
629627
2018/11/02(金) 11:02:16.38ID:PHrFLYGt 失礼しました。
631デフォルトの名無しさん
2018/11/02(金) 13:27:51.33ID:yBRnKDna632デフォルトの名無しさん
2018/11/02(金) 13:50:23.22ID:33vh4D4i vector<int> v{1, 2, 3, 4};
と定義して &v[0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と連続して確保されているようですが
●これは仕様上保証されていますか?
また
vector< vector<int> > w{{1, 2}, {3, 4}};
と定義して &w[0][0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, ?? ?? ?? ??, ?? ?? ?? ??
後半がランダム?
になるようですが
連続に
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と確保されるように2次元のvectorを定義するにはどうすれば出来ますか?
それとも出来ないのでしょうか?
と定義して &v[0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と連続して確保されているようですが
●これは仕様上保証されていますか?
また
vector< vector<int> > w{{1, 2}, {3, 4}};
と定義して &w[0][0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, ?? ?? ?? ??, ?? ?? ?? ??
後半がランダム?
になるようですが
連続に
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と確保されるように2次元のvectorを定義するにはどうすれば出来ますか?
それとも出来ないのでしょうか?
633デフォルトの名無しさん
2018/11/02(金) 13:51:24.50ID:kca9Lljk お前ら、未来と会話すんなよ
パラドックス起きるぜ
パラドックス起きるぜ
634デフォルトの名無しさん
2018/11/02(金) 13:54:46.41ID:kca9Lljk >>632
エンディアンもintサイズも固定じゃないので保証されない
エンディアンもintサイズも固定じゃないので保証されない
635デフォルトの名無しさん
2018/11/02(金) 14:03:14.42ID:Jb5Djrng vector の連続性について
ttp://cranehouse.dojin.com/program/vector.html
ttps://www.wdic.org/w/TECH/std::vector#xE3x83xA1xE3x83xA2xE3x83xAAxE3x83xBCxE3x81xAExE9x80xA3xE7xB6x9AxE6x80xA7
ttp://cranehouse.dojin.com/program/vector.html
ttps://www.wdic.org/w/TECH/std::vector#xE3x83xA1xE3x83xA2xE3x83xAAxE3x83xBCxE3x81xAExE9x80xA3xE7xB6x9AxE6x80xA7
636デフォルトの名無しさん
2018/11/02(金) 14:52:24.63ID:kca9Lljk vectorには本体データの他に管理データもあったりするので
そのvectorを作ると間にゴミに見えるデータが入りうる
そのvectorを作ると間にゴミに見えるデータが入りうる
637デフォルトの名無しさん
2018/11/02(金) 14:54:42.97ID:KQJo2ZCc ありがとうございます
int (*hoge)[要素数]; じゃなくて
int *hoge[]; みたいにポインタの配列になってるということでしょうか?
int (*hoge)[要素数]; じゃなくて
int *hoge[]; みたいにポインタの配列になってるということでしょうか?
638デフォルトの名無しさん
2018/11/02(金) 14:59:33.45ID:Jb5Djrng w[0] が返す vector の次元(大きさ)と
w[1] が返す vector の次元(大きさ)は異なっててもいい
から、そもそも論で 2次元配列 とは等価にならんし
w[1] が返す vector の次元(大きさ)は異なっててもいい
から、そもそも論で 2次元配列 とは等価にならんし
639デフォルトの名無しさん
2018/11/02(金) 15:06:38.51ID:kca9Lljk 前者だと要素追加しようとしたらどんちゃん騒ぎだよね
640デフォルトの名無しさん
2018/11/02(金) 15:14:04.01ID:KQJo2ZCc とりあえず「出来ない」という方向で仕様検討します
641デフォルトの名無しさん
2018/11/02(金) 16:46:54.30ID:ggr9EF3w642はちみつ餃子 ◆8X2XSCHEME
2018/11/02(金) 17:22:12.50ID:0I6l0gim 適当なラッパーを作って
期待する形のバイト列にするイテレータをくっつける
とかいった方法が考えられるかなぁ。
まあ場合によるけど、
大きさがコンパイル時に確定してよいのなら、
>>641 の方式が確実だと思う。
多次元配列を作る場合ってほとんどの場合はコンパイル時か
オブジェクト構築時には大きさが決まってると思うんよね。
後から伸ばしたり縮めたりってあんまりしなくなくなくなくない?
期待する形のバイト列にするイテレータをくっつける
とかいった方法が考えられるかなぁ。
まあ場合によるけど、
大きさがコンパイル時に確定してよいのなら、
>>641 の方式が確実だと思う。
多次元配列を作る場合ってほとんどの場合はコンパイル時か
オブジェクト構築時には大きさが決まってると思うんよね。
後から伸ばしたり縮めたりってあんまりしなくなくなくなくない?
643デフォルトの名無しさん
2018/11/02(金) 18:31:51.95ID:ibjOz3iU 1次元での連続性の要求は理解できるけど、2次元以降の多次元で配置の連続性の要求って何処からきてる?
思い浮かぶのが画像データぐらいだけど、それなら1次元+演算でも代用可能だし…
思い浮かぶのが画像データぐらいだけど、それなら1次元+演算でも代用可能だし…
644デフォルトの名無しさん
2018/11/02(金) 19:23:30.08ID:XwJWkHNz 2次元配列状のデータを2次元ベクタに一発で流し込めるからじゃない?
645デフォルトの名無しさん
2018/11/02(金) 23:47:26.58ID:NDSywfh9 環境に関して質問です。
windows10でcの環境作りたくて、コンパイラにminGWを入れたのですが、実行時エラーがでなくて不便です。
例えば、
char c='x';
printf("c: %s",c);
のように出力時のフォーマットを間違えたら、LinuxではRuntime error〜となにかしらエラーがでていたのに、エラーも何も出ずに(c: すら出ないで)終了します。
minGWの仕様なのか否か。
または、
windows10でminGWを使い、実行時エラーを出す方法を教えてください。
windows10でcの環境作りたくて、コンパイラにminGWを入れたのですが、実行時エラーがでなくて不便です。
例えば、
char c='x';
printf("c: %s",c);
のように出力時のフォーマットを間違えたら、LinuxではRuntime error〜となにかしらエラーがでていたのに、エラーも何も出ずに(c: すら出ないで)終了します。
minGWの仕様なのか否か。
または、
windows10でminGWを使い、実行時エラーを出す方法を教えてください。
646はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 00:16:22.42ID:q3m1JbMq647デフォルトの名無しさん
2018/11/03(土) 00:23:55.55ID:v6aDDcip648デフォルトの名無しさん
2018/11/03(土) 00:52:51.51ID:JdxI4C+o >>647
gdbで捕捉できるんですが、gcc実行のみでRuntimeErrorを表示させるにはコンパイラ変えるしかないですかね?
もともとvmにLinux入れて、c言語を学ぼうとしてた初心者の集まりなんですが、vm重いからwindowsに移行しようと、環境設定が簡単な方法をいろいろ試してるところです。
なので、Linuxでできてたことができなくなることが不安という感じです。
gdbで捕捉できるんですが、gcc実行のみでRuntimeErrorを表示させるにはコンパイラ変えるしかないですかね?
もともとvmにLinux入れて、c言語を学ぼうとしてた初心者の集まりなんですが、vm重いからwindowsに移行しようと、環境設定が簡単な方法をいろいろ試してるところです。
なので、Linuxでできてたことができなくなることが不安という感じです。
649デフォルトの名無しさん
2018/11/03(土) 01:02:20.38ID:v6aDDcip650デフォルトの名無しさん
2018/11/03(土) 01:09:09.93ID:JSD3MLAZ たまたまアクセスしたアドレスがアクセス違反でもない限り、そもそもエラーにしようがない気がするのだけど、どうやって補足してるの?
651デフォルトの名無しさん
2018/11/03(土) 01:36:19.09ID:v6aDDcip 多分リンクするランタイムライブラリ側の仕様ではないかと
652デフォルトの名無しさん
2018/11/03(土) 04:50:14.05ID:AAuGyX2A653デフォルトの名無しさん
2018/11/03(土) 04:51:37.68ID:AAuGyX2A あ、実行時か。
Cは実行時エラーの処理も自分で補足して書くものよ?
そう言う言語としか言えない。
Cは実行時エラーの処理も自分で補足して書くものよ?
そう言う言語としか言えない。
654デフォルトの名無しさん
2018/11/03(土) 09:37:50.89ID:1nZCEE4t 不定や未定儀を自らトラップするコードを記述するのは難易度高いな… 例外が捕まれば御の字だが
655はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 10:13:55.37ID:q3m1JbMq アドレスが 0 付近のページはプログラムミスでアクセスされやすいってことはわかっているので、
Windows でもなんか特別に予約してたような気がしたんだが、手元の資料で見つからんな……。
Windows でもなんか特別に予約してたような気がしたんだが、手元の資料で見つからんな……。
656デフォルトの名無しさん
2018/11/03(土) 11:07:57.01ID:LENdvKRs MMU付きのシステムなら、0番地をTLB missさせるのは一般的だね
けど、これ見るとwin95は違ったみたい。winNTはそうしてたみたい
Why is 0x00400000 the default base address for an executable?
https://blogs.msdn.microsoft.com/oldnewthing/20141003-00/?p=43923
けど、これ見るとwin95は違ったみたい。winNTはそうしてたみたい
Why is 0x00400000 the default base address for an executable?
https://blogs.msdn.microsoft.com/oldnewthing/20141003-00/?p=43923
657デフォルトの名無しさん
2018/11/03(土) 11:18:28.44ID:v6aDDcip 0番地ってNULLポインタ値に割り当ててなかった?
658はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:26:29.27ID:q3m1JbMq >>657
NULL はあくまでも「無効なポインタ」を表し、意味のある番地ではない。
けど、うっかり意味のある番地としてアクセスしたら 0 番地だから、
その付近へのアクセスがあったらたぶん駄目なプログラムとして検出しようねっていう話。
NULL はあくまでも「無効なポインタ」を表し、意味のある番地ではない。
けど、うっかり意味のある番地としてアクセスしたら 0 番地だから、
その付近へのアクセスがあったらたぶん駄目なプログラムとして検出しようねっていう話。
659はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:29:39.54ID:q3m1JbMq 今回の場合は char をポインタとして解釈してしまった場合ってことになるけど、
(0 ではないが) 0 に近いアドレスなので、その付近のページは
トラップ用に予約しておいたらあかんプログラムの検出に便利やんというわけ。
(0 ではないが) 0 に近いアドレスなので、その付近のページは
トラップ用に予約しておいたらあかんプログラムの検出に便利やんというわけ。
660はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 11:36:04.04ID:q3m1JbMq 本筋とは関係ないけど念のために補足しておくと、ヌルポインタがゼロというのは、
そういうアーキテクチャがほとんどだと思うけど言語仕様の保証はない。
整数のゼロと互換性はあるという扱いで、
つまりは、ヌルポインタを整数にキャストするとゼロだし、
ゼロをポインタにキャストするとヌルポインタになることは保証されるが、
ヌルポインタのビットパターンが整数のゼロと等しいことは保証されない。
(なので移植性が必要ならポインタの配列を memset とかで初期化したりするのは駄目)
そういうアーキテクチャがほとんどだと思うけど言語仕様の保証はない。
整数のゼロと互換性はあるという扱いで、
つまりは、ヌルポインタを整数にキャストするとゼロだし、
ゼロをポインタにキャストするとヌルポインタになることは保証されるが、
ヌルポインタのビットパターンが整数のゼロと等しいことは保証されない。
(なので移植性が必要ならポインタの配列を memset とかで初期化したりするのは駄目)
661デフォルトの名無しさん
2018/11/03(土) 13:12:43.48ID:LENdvKRs >>ゼロをポインタにキャストするとヌルポインタになることは保証されるが
そうだっけ。定数のゼロだけでは?
そうだっけ。定数のゼロだけでは?
662はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 14:56:28.34ID:q3m1JbMq663はちみつ餃子 ◆8X2XSCHEME
2018/11/03(土) 15:04:23.69ID:q3m1JbMq >>661-662
リテラルの 0 じゃなきゃダメなように改められたのは C++14 からだった。
リテラルの 0 じゃなきゃダメなように改められたのは C++14 からだった。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 中国とロシアの爆撃機、日本周辺で共同飛行 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 【悲報】昭和天皇「朕のチンチンw」ジャップ「現人神!現人神!」 [616817505]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★3 [597533159]
- 【高市朗報】ボーナス、支給される [391924956]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 【高市筋肉】筋トレおじさん、爆増wwwwwwwwwwwwwステロイド使用も増 [308389511]
