- 1 名前:デフォルトの名無しさん [2012/01/13(金) 22:05:06.14 ]
- C言語の*入門者*向け解説スレッドです。
★前スレ C言語なら俺に聞け(入門編)Part 94 toro.2ch.net/test/read.cgi/tech/1324648274/ ★過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 155代目 toro.2ch.net/test/read.cgi/tech/1325685876/ ★C++言語については避けてください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 長くなりそうなコードはcodepadに貼り付けてもいいでしょう codepad.org/
- 75 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:20:06.56 ]
- どういうことだよ。
お前、頭腐ってるわ。
- 76 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:21:02.62 ]
- o君の考えるスタックとは何を指しているのかね?
- 77 名前:o mailto:sage [2012/01/15(日) 13:21:07.96 ]
- >>72
f2を実行しないと、str[]の大きさが分からないんだけど、それでも大丈夫ってこと? 少なくとも512byteは確実に超えるんだけど。
- 78 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:22:09.28 ]
- ここまで日本語が通じないのも珍しいな。
いや、そうでもないか。
- 79 名前:o mailto:sage [2012/01/15(日) 13:22:30.21 ]
- >>75
>>69以外に方法があるなら、丁重に謝るよ。
- 80 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:24:14.16 ]
- >>79
お前の思い込みなんて人にはわからないんだよ。 だからお前のことを何も知らない普通の人間にわかるように整理して 1レスにまとめて質問してみろよ。
- 81 名前:o mailto:sage [2012/01/15(日) 13:24:59.66 ]
- >>76
関数が呼び出されたことにより確保される、SP、ReturnAddressと自動変数のかまたり
- 82 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:26:10.30 ]
- スタックのサイズが心配ならスタックを拡張するなりヒープを使うなり
すればいいだけだろ。
- 83 名前:o mailto:sage [2012/01/15(日) 13:27:07.83 ]
- >>80
あいよ。 聞きたい内容は、 呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか? 条件は次の通り ・データはストリームで落とされる。 ・孫関数にはポインタのポインタが渡される ・文字列の長さは不定長 ・区切り文字がある文字列 ・ストリームは、孫関数で処理される ・staticは使えない
- 84 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:28:38.77 ]
- だから、ストリームて何だよ。
思い込みハゲしいなまったく。
- 85 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:29:17.88 ]
- 文字列を直接変更できるかどうかに長さや区切り文字は関係ないだろ。
- 86 名前:o mailto:sage [2012/01/15(日) 13:31:05.93 ]
- >>84
不定長のデータ、でよいよ。
- 87 名前:o mailto:sage [2012/01/15(日) 13:32:15.62 ]
- >>85
>>72のコードで、512byteのデータをどうやって変更するの?
- 88 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:33:29.91 ]
- またか。
その512byteのデータと>>72がどう関係するんだよ。
- 89 名前:o mailto:sage [2012/01/15(日) 13:36:36.09 ]
- >>88
void f2(char* str){ str[500]='\r'; str[501]='\n'; } ができるんだったら、何も言わんよ
- 90 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:37:19.50 ]
- >>89
じゃぁ何も言うな。
- 91 名前:o mailto:sage [2012/01/15(日) 13:38:41.03 ]
- ああ、
void f2(char* str){ str[131070]='\r'; str[131071]='\n'; } ができるんだったら何も言わんよwww
- 92 名前:o mailto:sage [2012/01/15(日) 13:38:58.70 ]
- >>90
エラーが出るんですけどwww
- 93 名前:o mailto:sage [2012/01/15(日) 13:40:11.55 ]
- そりゃそうだわな。
str[10] と宣言しているのに、 str[131070]にアクセスしているんだもんね。 >>90は、そんなことも分からないの?
- 94 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:42:43.17 ]
- 何も言うなと言ってるだろ。
- 95 名前:o mailto:sage [2012/01/15(日) 13:47:33.40 ]
- >>94
君は、回答する前に、こっちを読んで勉強した方が良いと思うよ。 www.kumei.ne.jp/c_lang/intro/no_07.htm 宣言した数より大きな領域にアクセスさせるのは危険だよ。 書き込みなんかしたら、スタック壊しちゃうからね。 気をつけたほうが良いよ。
- 96 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:48:48.34 ]
- また、えらく拗らせちゃってるんだね。
スタックのサイズが心配なら512KBをヒープに確保してそれを渡せばいいだけだろ。 まわりの人も大変だろうな。
- 97 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:49:32.86 ]
- 無能な働き者ってこの質問主の様な奴の事なんだろうな。
- 98 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:50:59.22 ]
- >>95
>宣言した数より大きな領域にアクセスさせるのは危険だよ。 常識で分かることは言う必要がない。
- 99 名前:デフォルトの名無しさん [2012/01/15(日) 13:53:40.36 ]
- 無能な働き者。これは処刑するしかない。
- 100 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:56:50.88 ]
- ちょっとよくわからないのが
大元がmainだとして 「大元のスタックにある文字列」って >mainで >char streamData[131072] 以外にどうやって定義するの?
- 101 名前:o mailto:sage [2012/01/15(日) 13:56:56.89 ]
- >>96
ヒープに確保する方法は否定していないよ。
- 102 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:59:35.77 ]
- >>100
質問もできないくらいのレベルなんだから察してやれ。
- 103 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:00:57.52 ]
- >>100
allocaで確保するとかw
- 104 名前:o mailto:sage [2012/01/15(日) 14:04:12.54 ]
- >>103
良いね!
- 105 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:07:11.53 ]
- どこまでアホ?
alloca使ったところでスタックは拡張されない。 って、まぁ釣りだろうけどw
- 106 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:07:51.54 ]
- >>95
ストリームとやらの範囲内ならいくらでもアクセスできるでしょ。 例は10だったけど、そのストリームはもっと大きいんでしょ
- 107 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:08:49.44 ]
- >>104
allocaってスタックだよ。 ってかヒープを避ける理由がわからない。
- 108 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:10:33.82 ]
- char streamData[131072]
でも char *streamData = (char*)alloca(131072); でもいいけど、 結局>>72で問題なくね? allocaってのは初めて知ったわ
- 109 名前:o mailto:sage [2012/01/15(日) 14:12:26.25 ]
- >>107
直近の問題は、何時freeするのかが不定なことだけど、 本質的には、スレッドで動かしたいから、別スレッドからのアクセスをさせないために自動変数での処理をさせたい と言うのが本音。
- 110 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:13:45.65 ]
- スタックはスレッドで共通だが。
- 111 名前:o mailto:sage [2012/01/15(日) 14:14:14.13 ]
- >>108
どこからスレッドとして走らせるかだけど、 スレッドが100走ると末恐ろしい
- 112 名前:o mailto:sage [2012/01/15(日) 14:14:31.03 ]
- >>110
なの????
- 113 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:14:33.82 ]
- 別スレッドからのアクセス性についてな。
- 114 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:16:58.71 ]
- その点ではヒープもスタックも同じ。
普通、mallocもfreeもスレッドセーフだろ。
- 115 名前:o mailto:sage [2012/01/15(日) 14:17:20.97 ]
- >>113
だったら、ストリームデータを、他のスレッドが書き換えるって事が可能というか、 別のスレッドがストリームデータを壊すんだよね。 それじゃ、NGじゃね?
- 116 名前:o mailto:sage [2012/01/15(日) 14:17:48.14 ]
- >>114
だから、自動変数で、と・・・・
- 117 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:18:24.71 ]
- 最初に立ち戻るんだけど、ストリームは別スレッドから変更されうるんじゃないのかって気がするんだけど。
もしそうならポインタ保持じゃだめだけど、それは大丈夫? で、そのストリームが読み取り専用じゃないかつ、デリミタのような0バイトよりも大きな文字列があるのなら、strtokの要領で対応できないか?
- 118 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:18:55.57 ]
- >>116
自動変数=スタックと仮定すると>>114だと言ってるだろ。
- 119 名前:o mailto:sage [2012/01/15(日) 14:19:40.12 ]
- >>114
すまん、間違えた。 ヒープでもスレッドセーフなのか? ちょいと調べてみる
- 120 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:20:01.08 ]
- >>115
ポインタの先が別スレッドが確保したスタック領域ならそこを壊す。 つか、それはバグと言うんだがな。
- 121 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:20:52.74 ]
- >>119
お前はスレッドセーフという単語を理解してないに3億ペリカ。 いや、スレッドも理解してないに10億カノッサ。
- 122 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:21:39.04 ]
- 「ヒープでもスレッドセーフなのか?」
これなんぞ。 根本的な知識が圧倒的に足りないといわざるを得ない。 チートツールの前に初心者としてまっとうに勉強しなさいな。
- 123 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:25:52.76 ]
- mallocがスレッドセーフか? というのならそれはライブラリ次第。
- 124 名前:o mailto:sage [2012/01/15(日) 14:26:40.81 ]
- >>122
ヒープがスレッドセーフなんて聞いたことがない。 ライブラリが対応してスレッドセーフにしているケースなら知っているけど??? 君の知っているのはどんなシステム系なんだ?
- 125 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:26:48.56 ]
- だから普通と言ってるだろ。
スレッド使う環境でスレッドセーフじゃない設定をわざわざ使わない限りな。
- 126 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:27:16.83 ]
- >>125は>>123な。
>>124 3億カノッサよこせ。
- 127 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:28:51.62 ]
- >>124
関数がリエントラント可能かどうかについてその言葉を使うのであって、スタックやヒープに対して使うもんじゃないよ
- 128 名前:o mailto:sage [2012/01/15(日) 14:29:42.29 ]
- どう見ても、
>>122がダブルパンチ食らっているようにしか見えないけど?
- 129 名前:123 mailto:sage [2012/01/15(日) 14:30:33.99 ]
- >>125
まったくそのとおりだ。ちょっと上のスレもよまんで書いてしまった^^;
- 130 名前:デフォルトの名無しさん [2012/01/15(日) 14:30:34.75 ]
- すごいなぁ、お前。
- 131 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:30:53.25 ]
- もちろん、>>130は>>128な。
- 132 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:31:21.48 ]
- なんだこれ。恥ずかしくなって暴れ始めたのか
- 133 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:33:56.98 ]
- >>132
いや、多分素だと思うぞ。
- 134 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:33:59.84 ]
- >>124
もしかして「ヒープ領域からメモリを確保すること」の略として「ヒープ」っていってんの?
- 135 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:39:16.96 ]
- …静かになったぞ。何かを調べてんのか?
- 136 名前:o mailto:sage [2012/01/15(日) 14:41:13.91 ]
- >>133
素だよ。素人だっちゅってんだろ。 ちなみに、>>135 うんこ位させろよ。
- 137 名前:o mailto:sage [2012/01/15(日) 14:44:26.42 ]
- で、
>>52 って >普通に個人のコーディング規約に含まれる常識的な内容 だと思うんだけど、違うのか?
- 138 名前:o mailto:sage [2012/01/15(日) 14:45:49.46 ]
- >>134
その、 「ヒープ領域からメモリを確保すること」 の意味が分からんけど?
- 139 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:48:24.79 ]
- 素かよ。もっとやりたいことを具体的に示せ。
大体わかってるつもりでレスをしているんだが、訳わからんほうに話をずらされてる感じがする。 あと、>>127は大体あってるけど少し違う。 リエントラント可能であることはスレッドセーフであることを保障するが、逆はそうではない。
- 140 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:49:18.43 ]
- >>136
素。 ほんと、日本語も不自由なんだな。 恥ずかしくて素人じゃないって言えないだけじゃないのか?
- 141 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:52:26.93 ]
- >>138
それをわからずにヒープだスタックだ、あまつさえ「ヒープでもスレッドセーフなのか?」なんてことを言うのか。 逆に「スタックはスレッドセーフ」だと思っているってことだと思うんだけど、これがどういうことなのか説明してくれ。
- 142 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:52:32.31 ]
- >>139
そう思ってはじめたのが>>80なんだが。
- 143 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:53:39.55 ]
- 違うな。>>71だ。
- 144 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:54:09.40 ]
- お?>>60じゃないのか?
- 145 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:54:17.21 ]
- >>137
>グローバル宣言ができない 個人の開発で完全に禁止する利点があまりない。 グローバル変数をできるだけしないってのはまあ誰でも考える。 個人でコーディング規約を決めていたとして、 それに違反することを「コーディング規約により・・できない」って言い方をする人はあまりいない。 俺の方針に反するだとか、好みじゃないとか、そのレベルでしょ。
- 146 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:55:24.44 ]
- 素人じゃないことを隠したい素人さん。
- 147 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:55:33.69 ]
- 俺も文書がおかしいなw
×グローバル変数をできるだけしない ○グローバル変数をできるだけ使わない
- 148 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:57:21.78 ]
- >>142
>>8と>>83でエスパー大会ってことか… 加えて、>>115でストリームデータ(mainのstrか?)は別スレッドから変更されうる、と。 ストリームデータを変更されたあとでも使用したいのなら、 strへのアクセス処理を「スレッドセーフ」にして、 別領域(要件を満たせるならスタックでもヒープでも)にコピーするしか方法はないよな。
- 149 名前:o mailto:sage [2012/01/15(日) 14:57:25.09 ]
- >>141
スレッドに詰まれたスタックならスレッドセーフだろ。
- 150 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 14:59:49.89 ]
- >>149
すべてのスレッドはメモリ空間を共有する。 基本だ。
- 151 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:00:31.29 ]
- 「スレッドに詰まれたスタック」って、何?
- 152 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:00:48.32 ]
- 先にスレッドセーフの国語的な用例を調べて意味を理解してくれ
×スタックはスレッドセーフ ○スレッドセーフな関数、スレッドセーフなコード など
- 153 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:01:26.54 ]
- スタック領域がスレッドごとに確保されるってことを言いたいんだと。
- 154 名前:o mailto:sage [2012/01/15(日) 15:01:33.54 ]
- >>146
つまり、お前涙目ってことかな。 仕方ないだろ。俺が素人なんだから。 なんか同じような内容を別のところでも書いた気がするw
- 155 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:01:43.06 ]
- >>149
意識をあわせてレスをしようとしてみる。 スレッドのスタックにあるポインタの指すアドレスを複数のスレッドが保持している場合、 そのアドレスはスレッドセーフじゃない (かなりひどい文だが…
- 156 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:02:06.27 ]
- >>154
素人を自覚してるならまずその態度を治せ。
- 157 名前:o mailto:sage [2012/01/15(日) 15:02:28.96 ]
- >>153
あんがと
- 158 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:03:20.08 ]
- で、そのスタック領域はすべてのスレッドが共有するメモリ空間にあるわけだが、
そのあたりを1_も理解してないんだろう。
- 159 名前:o mailto:sage [2012/01/15(日) 15:03:27.27 ]
- >>156
回答している人の中に、素人が混じってるから仕方ないと思うよw
- 160 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:03:46.60 ]
- >>156
それは大抵の場合、やりたいことを引き出すことよりも難しいよ
- 161 名前:o mailto:sage [2012/01/15(日) 15:04:05.63 ]
- >>158
プロセスって言葉を出させたいってこと?
- 162 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:04:33.23 ]
- >>161
そんなことはどうでもいいから>>148
- 163 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:05:41.01 ]
- >>161
いや。 お前がスレッドすら1_も理解してないことを自覚させたいだけ。
- 164 名前:o mailto:sage [2012/01/15(日) 15:10:42.02 ]
- >>162
スマートな方法じゃないけど、「スタッククラス」で対応するのも手かもよ。 コピーするだけが能じゃない気がするけど???
- 165 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:11:26.00 ]
- お前は何を言っているんだ。
- 166 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:12:22.49 ]
- C++なの?
- 167 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:13:26.78 ]
- その「スタッククラス」ではコピーが必要ないの?初心者の俺にkwsk
- 168 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:13:44.46 ]
- まだ「スタックはスレッドセーフ」という妄想に取り付かれてるようだな。
- 169 名前:o mailto:sage [2012/01/15(日) 15:14:43.67 ]
- >>166
ANSI-Cベースなので、クラスは使わない方向で行きたいが、 コーディングはCDTでやってる。
- 170 名前: ◆QZaw55cn4c mailto:sage [2012/01/15(日) 15:15:06.19 ]
- >>110
いいえ、スタックとプログラムカウンタはスタックごとに別。
- 171 名前:o mailto:sage [2012/01/15(日) 15:15:31.34 ]
- >>168
そのスタックの話をしているわけじゃないのは分かっているよね?
- 172 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:16:33.51 ]
- お、QZにちょうどいい相手じゃないか?
ちょっとどんな展開になるのか、他の人はだまってみてようよw
- 173 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:16:56.99 ]
- >>164
それで実装したコードを挙げてくれ。そうすればもっとスマートな解決方法を出すことができるかもしれない。
- 174 名前:o mailto:sage [2012/01/15(日) 15:17:00.12 ]
- >>172
そうだな。 素人が1人減るしねw
- 175 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 15:17:27.54 ]
- QZの意見を聞きたくなる場面なんてあまりないからなw
ぜひ回答してやってくださいQZさん
|

|