C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
前
http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
2017/08/10(木) 20:21:23.44ID:hEocmkh50337デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/22(金) 05:10:39.06ID:BRiVyzo00 while((a=Console.ReadLine())!=null)こうゆうので入力がなかったら終了するって簡単にできればC言語も楽なんだけどな
338デフォルトの名無しさん (ワッチョイ de1c-iatd)
2017/09/22(金) 14:57:26.19ID:8MJCwgYc0 int *get_int(int *dst, jmp_buf err)
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・
339デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/22(金) 20:47:03.45ID:dtN6vQMf0 >>334
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?
340デフォルトの名無しさん (ワッチョイ 3b23-Iax1)
2017/09/22(金) 22:06:16.56ID:IvB4cJv30 チルダ付けたのは失敗した時に-1が返されると思ったからかな?
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。
341デフォルトの名無しさん (ワッチョイ 8300-Dc1X)
2017/09/22(金) 22:16:43.87ID:JX9ZYj2p0 組込み以外で~使ってんの初めて見た
342デフォルトの名無しさん (ワッチョイ 8300-pgy8)
2017/09/22(金) 22:21:06.44ID:FtjqsiSd0 普通にビット処理だと使うよね
ビット処理なんかしないって?
ビット処理なんかしないって?
343334 (ワッチョイ eb6f-9dtB)
2017/09/22(金) 22:25:08.34ID:exEqzPdX0 ごめんウソ書いたわ
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい
>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい
>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね
345デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 07:38:02.97ID:9QRg4G5c0346デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/23(土) 11:43:39.39ID:8bsZ0VcP0347デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 14:50:28.05ID:IblrvTVf0 Win32環境なのですが
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?
348デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 15:16:24.27ID:PasvkTo90 具体的なコードもなく原因を聞かれても、どうしようもないと思うぞ
VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな
VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな
349片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 15:34:39.04ID:oO/4QkxId >>347
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。
350デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 16:05:08.45ID:IblrvTVf0 >>348-349
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{
…
} catch (...) {
…
}
}
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{
…
} catch (...) {
…
}
}
351片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:06:48.32ID:oO/4QkxId スタックを破壊してる可能性
352片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:07:30.45ID:oO/4QkxId 呼び出し規約が間違い
353デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 16:14:51.44ID:IblrvTVf0354片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:23:43.62ID:oO/4QkxId https://msdn.microsoft.com/ja-jp/library/kdzttdcb.aspx
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。
355片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:28:26.72ID:oO/4QkxId 配列の添字がオーバーしてないか?
356片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:50:48.86ID:oO/4QkxId ideone.com に貼れ
357デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 19:47:03.99ID:IblrvTVf0 >>356
もう少し深く調べてみます!ありがとうございます!
もう少し深く調べてみます!ありがとうございます!
358デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 21:54:35.77ID:IblrvTVf0 >>356
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……
359デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 22:09:28.20ID:9QRg4G5c0 排他制御の問題ではなく
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン
int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }
a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン
int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }
a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ
360デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 22:20:31.54ID:IblrvTVf0361デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 22:28:00.05ID:9QRg4G5c0 volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
362デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 22:50:44.07ID:IblrvTVf0363デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 22:58:35.90ID:PasvkTo90 何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな
まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな
まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
364デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/23(土) 23:10:54.21ID:Z1NsXN0c0 >>358
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?
つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?
つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
365デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/23(土) 23:20:05.48ID:Z1NsXN0c0 >>363
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
> つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
> つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
> つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
> つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。
366デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 23:22:23.90ID:PasvkTo90367デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:26:59.26ID:IblrvTVf0 >>361-365
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……
368デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:29:48.18ID:IblrvTVf0 こういう事ですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?
369デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 23:33:50.34ID:9QRg4G5c0 書き込み時だけロックして 読み込み側のほうはロックせずに読み込んでる
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?
370デフォルトの名無しさん (ワッチョイ 3b23-Iax1)
2017/09/23(土) 23:49:15.83ID:8bsZ0VcP0 volatileにしてロックして読み書きするのが普通では?
371デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:55:28.48ID:IblrvTVf0 >>369-370
volatileにして読み書きロックして厳密にやります!
volatileにして読み書きロックして厳密にやります!
372デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/23(土) 23:57:26.40ID:Z1NsXN0c0 >>368
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。
ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。
ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。
373デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 00:00:33.14ID:jg2xx4vD0 posixだとロックAPIにメモリ同期の効果があるから、普通はvolatileいらんけどな
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども
374デフォルトの名無しさん (スププ Sdaa-iJNy)
2017/09/24(日) 00:22:34.33ID:AOwUcJWDd375デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/24(日) 01:04:50.76ID:R8lp94JX0 >>374
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)
データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。
ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)
データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。
ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。
376デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 05:58:29.08ID:jg2xx4vD0 ロック中の読み出しが最適化で消えるなら、それはロックとコンパイラが腐ってる
377デフォルトの名無しさん (ドコグロ MMc2-gXon)
2017/09/24(日) 08:32:31.64ID:LX+6AD0qM378デフォルトの名無しさん (ドコグロ MMc2-gXon)
2017/09/24(日) 08:36:33.73ID:LX+6AD0qM379デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 10:21:22.00ID:jg2xx4vD0 はあ、そうですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか
380デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 10:22:36.14ID:gFeQddMX0 バカには使えないだけ
381デフォルトの名無しさん (ワッチョイ aaef-hoCt)
2017/09/24(日) 11:32:55.30ID:070pAcfa0 test
382デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/24(日) 13:57:54.86ID:c233uqnI0 腐っているのでしょう
383デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 14:40:58.49ID:jg2xx4vD0 メモリバリアを跨いでオブジェクトへのアクセス命令を最適化するとか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか
384デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 15:53:44.93ID:gFeQddMX0 CreateSection の使い方ぐらい調べてから書けばいいのに...
まあ他人事だしどうでもいいけど w
まあ他人事だしどうでもいいけど w
385デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 16:31:41.65ID:jg2xx4vD0 CriticalSectionの話のつもりだったんだけど、CreateSectionに変わったの?
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった
386デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 16:59:33.91ID:gFeQddMX0387デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 17:30:54.77ID:jg2xx4vD0 >The following synchronization functions use the appropriate barriers to ensure memory ordering:
>Functions that enter or leave critical sections
>Functions that signal synchronization objects
>Wait functions
>Interlocked functions
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx
調べたけどCriticalSectionだけで十分そうだよ
Internallockedとかのほうが手軽そうだけどね
>Functions that enter or leave critical sections
>Functions that signal synchronization objects
>Wait functions
>Interlocked functions
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx
調べたけどCriticalSectionだけで十分そうだよ
Internallockedとかのほうが手軽そうだけどね
388デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/25(月) 02:44:46.68ID:glvYaQMb0 https://teratail.com/questions/39986
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?
389デフォルトの名無しさん (オッペケ Sra3-Brv+)
2017/09/25(月) 03:09:32.37ID:eX6e3GbIr Cのコンパイラはクリティカルセクションなんて知らない。単なる構造体かなんかのtypedefとして実直にコンパイルするだけ。
スレッド関連の関数についても単に関数の一種として扱うだけ。
従ってスレッドやクリティカルセクションを扱っているかどうかが最適化の結果に影響することはない。
一方volatile指定はコンパイラが認識するキーワードで最適化に影響する。
スレッド関連の関数についても単に関数の一種として扱うだけ。
従ってスレッドやクリティカルセクションを扱っているかどうかが最適化の結果に影響することはない。
一方volatile指定はコンパイラが認識するキーワードで最適化に影響する。
390デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/25(月) 04:54:33.75ID:glvYaQMb0 ということは今回の事例だと排他制御しても不具合は解消できなかったという事かな?
volatile付けて最適化を無効にすることが正しい解決策だったということになる?
volatile付けて最適化を無効にすることが正しい解決策だったということになる?
391デフォルトの名無しさん (ドコグロ MMb3-gXon)
2017/09/25(月) 06:45:40.93ID:/OvZrhVRM >>387
だからそれはメモリーバリアの話で最適化の話とは別だよ
繰り返しになるけど CriticalSection は排他制御するリソースを知ることはできないしコンパイラも CriticalSection のことを知らない
だからそれはメモリーバリアの話で最適化の話とは別だよ
繰り返しになるけど CriticalSection は排他制御するリソースを知ることはできないしコンパイラも CriticalSection のことを知らない
392デフォルトの名無しさん (ドコグロ MMb3-gXon)
2017/09/25(月) 06:49:50.09ID:/OvZrhVRM >>390
どう言うことをやりたいのかよく見てないけど排他制御と最適化の話は別だから必要なら両方やらないとダメ
どう言うことをやりたいのかよく見てないけど排他制御と最適化の話は別だから必要なら両方やらないとダメ
393デフォルトの名無しさん (ワッチョイ 07db-MkHK)
2017/09/25(月) 08:38:06.32ID:5M6SeBxY0 eieio()
394デフォルトの名無しさん (ワッチョイ 8a4c-hoCt)
2017/09/25(月) 09:41:28.46ID:Eov43usf0 >>389
それ、スレッドまわりが規格化されてなかった C99 までの話だよね?
それ、スレッドまわりが規格化されてなかった C99 までの話だよね?
395デフォルトの名無しさん (ラクッペ MMb3-IkPz)
2017/09/25(月) 09:53:00.17ID:eS71dZMPM 最近のは規格化されてんの?
396デフォルトの名無しさん (ワッチョイ ded7-E1uO)
2017/09/25(月) 09:58:09.00ID:Tp6H3jwU0 規格化されてるのはPOSIXでじゃね?
397394 (ワッチョイ 8a4c-hoCt)
2017/09/25(月) 09:59:34.82ID:Eov43usf0 こんな感じ。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
5.1.2.4/5
"The library defines a number of atomic operations (7.17) and operations on
mutexes (7.26.4) that are specially identified as synchronization operations.
These operations play a special role in making assignments in one thread visible
to another. ..."
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
5.1.2.4/5
"The library defines a number of atomic operations (7.17) and operations on
mutexes (7.26.4) that are specially identified as synchronization operations.
These operations play a special role in making assignments in one thread visible
to another. ..."
398デフォルトの名無しさん (オッペケ Sra3-Brv+)
2017/09/25(月) 12:40:04.95ID:uoxmxxDAr >>394
おおごめん、規格自体には詳しくない
しかし…
pthread関連の標準関数や定義を仮にコンパイラが特別扱いしたとすると、標準関数をラップしたり自作ライブラリで代替した場合に最適化の結果が変わるのかな?
そんな風にコンパイラ作るものなんだろうか。
おおごめん、規格自体には詳しくない
しかし…
pthread関連の標準関数や定義を仮にコンパイラが特別扱いしたとすると、標準関数をラップしたり自作ライブラリで代替した場合に最適化の結果が変わるのかな?
そんな風にコンパイラ作るものなんだろうか。
399デフォルトの名無しさん (ワッチョイ aaef-PvnN)
2017/09/25(月) 20:34:55.44ID:6/+o0Gkh0 posix-thread 関係については C++11 で追加されたが,
あくまでも言語処理系の中で定義された識別子(関数とかクラスとか)を使わないと,コンパイラには分かりえないよ.
CreateThread() とか CriticalSection とかの W32API の用語を,無指定でコンパイラが理解できるわけがない.
あくまでも言語処理系の中で定義された識別子(関数とかクラスとか)を使わないと,コンパイラには分かりえないよ.
CreateThread() とか CriticalSection とかの W32API の用語を,無指定でコンパイラが理解できるわけがない.
400デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/25(月) 20:47:31.93ID:LPAVGpvK0 >>390
コンパイラは基本的に問答無用で最適化するけど、それだとマルチスレッドではプログラマの意図しない最適化が起こってしまう
だから、メモリバリアを挟んだアクセス命令を入れ替えないことにしている
言い換えると、メモリバリア前に読み込んだ値をメモリバリア後も使うような最適化はしない
よって、バリア+ロックで十分
共有リソースは全部volatile付けるなんてしてたら、kernelのソースとかvolatileまみれになるでしょ
コンパイラは基本的に問答無用で最適化するけど、それだとマルチスレッドではプログラマの意図しない最適化が起こってしまう
だから、メモリバリアを挟んだアクセス命令を入れ替えないことにしている
言い換えると、メモリバリア前に読み込んだ値をメモリバリア後も使うような最適化はしない
よって、バリア+ロックで十分
共有リソースは全部volatile付けるなんてしてたら、kernelのソースとかvolatileまみれになるでしょ
401デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/25(月) 21:45:53.20ID:LPAVGpvK0 当然、ローカル変数とか他から変更されないことが明らかなオブジェクトであれば最適化が起こる可能性は否定しない
グローバル変数の場合は、最適化されない
やってみればわかるけど、CriticalSecltionの有無でアセンブル結果が違う
グローバル変数の場合は、最適化されない
やってみればわかるけど、CriticalSecltionの有無でアセンブル結果が違う
402デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/25(月) 21:46:58.74ID:LPAVGpvK0 アホなこと書いた、コンパイル結果だな。。。
403デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/25(月) 23:03:28.51ID:LPAVGpvK0 CriticalSectionに限らず未知の関数が呼ばれたのであれば、その中でグローバル変数やらが変更される可能性を考慮しなければならない
他にも、ある関数の引数にローカル変数のアドレスを渡すと、以降の別関数内でそのアドレス経由でローカル変数を変更される可能性がある
よって、場合によってはローカル変数であっても関数呼び出しを跨いで最適化できなくなることがある
わからないからこそ、最適化してはならないんだよ
他にも、ある関数の引数にローカル変数のアドレスを渡すと、以降の別関数内でそのアドレス経由でローカル変数を変更される可能性がある
よって、場合によってはローカル変数であっても関数呼び出しを跨いで最適化できなくなることがある
わからないからこそ、最適化してはならないんだよ
404デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/25(月) 23:26:04.50ID:3XblncDf0 >>390
ならない。君のソースコードだけの問題だ。同期機構の使い方が悪いだけ。
スレッドなんてここ20年間バリバリに使われてる。
VC等の小慣れているコンパイラなら、最適化ありで全く問題なく動く。
(マルチスレッド向けのデバッグは完了している)
Debugでは動くがReleaseでは動かないケースに遭遇した初心者は、君のように
「最適化の問題であり今回はDebugを使うこと」を正当化したがるが、これは間違いだ。
ただしDebugビルドでもバイナリは出来るから、問題ないのならそれを使う手もある。
ならない。君のソースコードだけの問題だ。同期機構の使い方が悪いだけ。
スレッドなんてここ20年間バリバリに使われてる。
VC等の小慣れているコンパイラなら、最適化ありで全く問題なく動く。
(マルチスレッド向けのデバッグは完了している)
Debugでは動くがReleaseでは動かないケースに遭遇した初心者は、君のように
「最適化の問題であり今回はDebugを使うこと」を正当化したがるが、これは間違いだ。
ただしDebugビルドでもバイナリは出来るから、問題ないのならそれを使う手もある。
405デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/26(火) 00:33:15.50ID:8E9hjYW60 ちゃんと排他処理が出来ていないことに気付かず、デバッグオプション付きとか
遅いマシンとかで正常動作してしまい、何年後かに速いマシンにリプレイスしたら
丁度良くバグが顕在化するようなタイミングになってしまった、
なんてことが以前本当に起きた。
サーバ用とかでソフトが長期間使われる場合は要注意だ。
遅いマシンとかで正常動作してしまい、何年後かに速いマシンにリプレイスしたら
丁度良くバグが顕在化するようなタイミングになってしまった、
なんてことが以前本当に起きた。
サーバ用とかでソフトが長期間使われる場合は要注意だ。
406デフォルトの名無しさん (ワッチョイ 8300-pgy8)
2017/09/26(火) 00:35:55.65ID:piJXswiP0 歯痛制御のバグ
珍しくない
発見しづらく、再現性も乏しく、解析に手間がかかりがち
レベルの低い開発者が混ざると大変
珍しくない
発見しづらく、再現性も乏しく、解析に手間がかかりがち
レベルの低い開発者が混ざると大変
407デフォルトの名無しさん (ワッチョイ 1eaa-ZPBl)
2017/09/26(火) 01:21:21.88ID:mvSUAuA/0 マルチスレッドは、たまたま動いているだけで、
ちょっとしたタイミングで、バグる
初心者は、たいてい、コンパイラのバグのせいにする。
それか、リリースビルドの最適化がおかしいと言う
プロは、Elixir などの関数型を使う
ちょっとしたタイミングで、バグる
初心者は、たいてい、コンパイラのバグのせいにする。
それか、リリースビルドの最適化がおかしいと言う
プロは、Elixir などの関数型を使う
408デフォルトの名無しさん (ワッチョイ 3b23-Iax1)
2017/09/26(火) 02:12:13.37ID:8E9hjYW60 いや、ちゃんとロックすりゃなんとかなるってw
もちろん最初から考慮されてる言語は何も考える必要ないからうまく行って当然。
もちろん最初から考慮されてる言語は何も考える必要ないからうまく行って当然。
409デフォルトの名無しさん (ワッチョイ 8a1e-Yxyu)
2017/09/26(火) 07:38:51.81ID:hxYjIs4i0 >>406
痛そうだな。
痛そうだな。
410デフォルトの名無しさん (ワッチョイ 8e6c-Dc1X)
2017/09/26(火) 10:15:02.85ID:IHENDkWx0 >>406
つらそうなバグだ
つらそうなバグだ
411デフォルトの名無しさん (ガラプー KK47-1mMI)
2017/09/26(火) 12:32:55.96ID:Ue/ou9XsK >>406
ウンコだなw
ウンコだなw
412デフォルトの名無しさん (ワッチョイ 1396-Otw/)
2017/09/27(水) 16:40:21.40ID:zCHNwx740 初心者です。エラーでまくりでコンパイルすら出来ません。アドバイスお願いします。
■やりたいこと。
マウス入力にrawinputを用いるアプリのWndProcをフックし、rawinput(WM_INPUT)を強制オフにし、DirectInputを使用するように指定。
↓ソース
// FuckRawInput.c
#include <windows.h>
LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_CREATE:
{
RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY;
Rid[0].hwndTarget = hWnd;
RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) ;
break;
}
-----
また、この方法が最適なのかも不明です。ほかの方法等もあったら教えてください
■やりたいこと。
マウス入力にrawinputを用いるアプリのWndProcをフックし、rawinput(WM_INPUT)を強制オフにし、DirectInputを使用するように指定。
↓ソース
// FuckRawInput.c
#include <windows.h>
LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_CREATE:
{
RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY;
Rid[0].hwndTarget = hWnd;
RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) ;
break;
}
-----
また、この方法が最適なのかも不明です。ほかの方法等もあったら教えてください
413デフォルトの名無しさん (ワッチョイ 8300-pgy8)
2017/09/27(水) 18:30:09.48ID:Ep3hxvTm0 C言語の問題?
414デフォルトの名無しさん (ワッチョイ 0af0-PvnN)
2017/09/27(水) 21:09:13.07ID:kxaL/Pai0 初心者とは
415412 (ワッチョイ 1396-Otw/)
2017/09/27(水) 21:51:08.08ID:zCHNwx740416デフォルトの名無しさん (ワッチョイ 1edb-PvnN)
2017/09/27(水) 22:01:39.03ID:htvdQyi40 日頃の行い
417デフォルトの名無しさん (ワッチョイ 0f23-Vg32)
2017/09/27(水) 22:08:30.48ID:6Zcxzpoi0 エラーのせろハゲ!
418デフォルトの名無しさん (ワッチョイ 2bb6-lfob)
2017/09/27(水) 22:35:55.70ID:MZoqRzWL0 どうやってWndProcをフックするつもりなのか知らんが、初心者のやることじゃない
419デフォルトの名無しさん (ワッチョイ 8300-pgy8)
2017/09/27(水) 22:46:41.34ID:Ep3hxvTm0 スレチ
420デフォルトの名無しさん (ワッチョイ e523-d/1N)
2017/09/28(木) 00:13:55.27ID:LEgoP/Tm0 >>412
本当にそれがソースの全てか?
本当にそれがソースの全てか?
421デフォルトの名無しさん (ドコグロ MM93-KCdQ)
2017/09/28(木) 06:54:14.40ID:0QfR7+YkM >>412
とりあえず文法エラーのないソースを出せよ
とりあえず文法エラーのないソースを出せよ
422デフォルトの名無しさん (ワッチョイ 23f0-IQJU)
2017/09/28(木) 08:22:53.76ID:veeq8lRB0 >>415
windowsプログラムでFuckファックは初心者がやるものではない
何故かと言うとFuckファックは非常に拙いからで、これはご存じの通りにFuckファックつまりはセクロスとかセックスを意味する
FuckRawInputなどと書かれると非常に面食らうので、動作には全く関係ないがFuckファックの箇所をHookフックとする
Fookという間違いならまだしもFuckが出てくるのは途轍もなく拙い
windowsプログラムは入門書を一通り終えた後にようやく手を出せる程度に面倒くさい
windowsプログラムでFuckファックは初心者がやるものではない
何故かと言うとFuckファックは非常に拙いからで、これはご存じの通りにFuckファックつまりはセクロスとかセックスを意味する
FuckRawInputなどと書かれると非常に面食らうので、動作には全く関係ないがFuckファックの箇所をHookフックとする
Fookという間違いならまだしもFuckが出てくるのは途轍もなく拙い
windowsプログラムは入門書を一通り終えた後にようやく手を出せる程度に面倒くさい
423デフォルトの名無しさん (アウアウカー Sad1-6oKo)
2017/09/28(木) 12:17:20.62ID:wLxR5weia 最近勉強始めたんだがループ動作めんどくさ
424デフォルトの名無しさん (ワッチョイ eb32-Txnz)
2017/09/28(木) 16:28:25.85ID:p7vLxmpX0 C++の標準でWindowsのCOMみたいなのはできるの?
モジュールがあれば動的リンクできて、向こう側の関数の形式とエントリポイントがわかるような。
モジュールがあれば動的リンクできて、向こう側の関数の形式とエントリポイントがわかるような。
425デフォルトの名無しさん (ドコグロ MM51-KCdQ)
2017/09/28(木) 18:20:04.96ID:klqlvKrNM426412 (ワッチョイ 9596-5hSF)
2017/09/28(木) 19:27:04.11ID:te0QQW2V0 >>418-422
WndProcフックでは目的の動作できなくて、APIフックしか手がないと分かりましたので、
MSのdetourとかいうの使ったAPIフックに変更されました。改めて、見てください。
@やりたいこと
Rawinputマウス関数が呼び出させられる代わりDirectInputマウス関数を呼び出し、強制的にマウス操作をDirectInputにする
ソース↓
// APIhook_RawInput.c
#include <windows.h>
#include "detours.h"
hoge target = NULL; // ターゲットポインタ
hoge tp = NULL; //トランポリンポインタ
// 関数生成
BOOL WINAPI Direct_Input(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
return tp(hWnd, Msg, wParam, lParam);
}
// user32インスタンス
HINSTANCE xxxxx;
case WM_CREATE:
//user32.DLLをロード
xxxxx = LoadLibrary("user32.dll");
//Raw Inputポインタ取得
target = (hoge) GetProcAddress(xxxxx, "WM_INPUT");
// WM_INPUTフック、"WM_INPUT"→"Direct_Input"置き換え
tp = (hoge) DetourFunction((PBYTE) target, (PBYTE) Direct_Input);
break;
// 終了時の処理
case WM_DESTROY:
// フック削除
DetourRemove((PBYTE) tp, (PBYTE) Direct_Input);
WndProcフックでは目的の動作できなくて、APIフックしか手がないと分かりましたので、
MSのdetourとかいうの使ったAPIフックに変更されました。改めて、見てください。
@やりたいこと
Rawinputマウス関数が呼び出させられる代わりDirectInputマウス関数を呼び出し、強制的にマウス操作をDirectInputにする
ソース↓
// APIhook_RawInput.c
#include <windows.h>
#include "detours.h"
hoge target = NULL; // ターゲットポインタ
hoge tp = NULL; //トランポリンポインタ
// 関数生成
BOOL WINAPI Direct_Input(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
return tp(hWnd, Msg, wParam, lParam);
}
// user32インスタンス
HINSTANCE xxxxx;
case WM_CREATE:
//user32.DLLをロード
xxxxx = LoadLibrary("user32.dll");
//Raw Inputポインタ取得
target = (hoge) GetProcAddress(xxxxx, "WM_INPUT");
// WM_INPUTフック、"WM_INPUT"→"Direct_Input"置き換え
tp = (hoge) DetourFunction((PBYTE) target, (PBYTE) Direct_Input);
break;
// 終了時の処理
case WM_DESTROY:
// フック削除
DetourRemove((PBYTE) tp, (PBYTE) Direct_Input);
427デフォルトの名無しさん (アウアウカー Sad1-Vnaa)
2017/09/28(木) 21:05:11.91ID:9JTfqDLya >>426
で、お前が聞きたいのは「C言語」に関するどんな質問なんだ?
で、お前が聞きたいのは「C言語」に関するどんな質問なんだ?
428デフォルトの名無しさん (ワッチョイ 7500-vp8x)
2017/09/28(木) 22:00:23.65ID:kmv+HSxh0 >>421が悪い
責任もって相手しろ
責任もって相手しろ
429デフォルトの名無しさん (ワッチョイ 7500-vp8x)
2017/09/28(木) 22:01:12.32ID:kmv+HSxh0 >>419が正しい対応
430デフォルトの名無しさん (アウアウカー Sad1-pOaJ)
2017/09/28(木) 23:13:22.30ID:hENZyM/7a 会話にすらなってないな。
こういうのホントにいるんだよなあ。、。
こういうのホントにいるんだよなあ。、。
431デフォルトの名無しさん (ワッチョイ 4b6f-TKIo)
2017/09/28(木) 23:59:03.21ID:mJZoGNOM0432デフォルトの名無しさん (ワッチョイ c523-IQJU)
2017/09/29(金) 01:12:28.71ID:tjqo0EG60433デフォルトの名無しさん (ワッチョイ e523-d/1N)
2017/09/29(金) 01:17:32.92ID:EHQhOpQV0 >>426
本当にそれがソースの全てなのか?
本当にそれがソースの全てなのか?
434デフォルトの名無しさん (ワッチョイ 9baa-iHa+)
2017/09/30(土) 05:35:50.31ID:/O3sxKWS0 これ無理だろうWindowsプログラムの言語を理解してないと直せないっしょ
435デフォルトの名無しさん (ワッチョイ ab23-Txnz)
2017/10/02(月) 09:21:38.64ID:SGi8KvwU0 勘所がすぐつかめる人ならそうでもない
知らんOS知らん言語知らん環境でもデバッグできちゃうんだぜ
あいつら宇宙人だろ
知らんOS知らん言語知らん環境でもデバッグできちゃうんだぜ
あいつら宇宙人だろ
436デフォルトの名無しさん (ワッチョイ 2312-IQJU)
2017/10/02(月) 13:06:27.14ID:6IbuGwAs0 >16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。
437デフォルトの名無しさん (ワッチョイ 2345-U38j)
2017/10/03(火) 03:00:19.61ID:TSZxzm0B0 お助けください。
自作コードにおいて、以下の部分でmemsetの際にsegmentation faultになってしまいます。
int n = 2;
char charList[n+1][32]; // 32文字の文字列をn+1確保・・・@
func(charList); // charListに書き込む関数
for (int i = 0; i < n; ++i) memset(charList[i], ' ', 32); // 空白で埋めたい
funcを省いたりmemsetの前に適当にcharListをプリントしたりすると何故か問題なく動きます。
この部分だけ切り出したテストコードでは全く再現しませんでした。
この手のエラーでよくあるのは未初期化領域へのアクセスだと思いますが、
@で領域の確保はできているからこれは原因ではないですよね?
どこがエラーの原因でしょうか・・・?
自作コードにおいて、以下の部分でmemsetの際にsegmentation faultになってしまいます。
int n = 2;
char charList[n+1][32]; // 32文字の文字列をn+1確保・・・@
func(charList); // charListに書き込む関数
for (int i = 0; i < n; ++i) memset(charList[i], ' ', 32); // 空白で埋めたい
funcを省いたりmemsetの前に適当にcharListをプリントしたりすると何故か問題なく動きます。
この部分だけ切り出したテストコードでは全く再現しませんでした。
この手のエラーでよくあるのは未初期化領域へのアクセスだと思いますが、
@で領域の確保はできているからこれは原因ではないですよね?
どこがエラーの原因でしょうか・・・?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 死にてえやつこい
- 【朗報】アメリカ、貿易赤字が市場予想を超える大幅縮小WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【東京新聞】「偽サッチャー」「自滅的」「時代遅れ」高市首相の経済政策を海外メディアが酷評www [718678614]
- 【悲報】維新の政治資金でガールズバー、高市首相「良いか悪いかは国民の皆さまが判断されること」 [115996789]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】女性「スタバで癒やされに来たのに、小汚いおっさんがいたあ!!😭」 [769050516]
