2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]

1 ::2016/08/14(日) 00:04:05.53 ID:z6U1tRVC.net
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/
21 http://toro.2ch.net/test/read.cgi/tech/1342285511/
22 http://peace.2ch.net/test/read.cgi/tech/1399911167/
23 http://peace.2ch.net/test/read.cgi/tech/1420379468/
24 http://echo.2ch.net/test/read.cgi/tech/1448685034/

333 :デフォルトの名無しさん:2018/02/16(金) 06:26:26.41 ID:6scYlSnj.net
>>330
セグメンテーションフォールトを起こす直接の原因は、
memset() の第1引数 &aaa + sizeof(uint32_t) * 2 の部分だろうね。
printf("%p\n", &aaa);
printf("%p\n", &aaa.c);
printf("%p\n", &aaa + sizeof(uint32_t) * 2);
上の3行の出力を比較検討すると理屈が分かると思うけど説明は長くなる。
というか、俺にはポインタ加算について短く平易に説明する能力がない。


#include <stddef.h> // offsetof()マクロの定義
if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);

で動くと思うけど、
ダミーの構造体に読み込んでから、bの値を見て有効な部分だけ
(あらかじめ0クリアしておいた)返却用の構造体にコピー、とする方が素直かも。

334 :デフォルトの名無しさん:2018/02/16(金) 12:40:06.06 ID:6scYlSnj.net
カッコの対応が合ってないね。

× if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);
○ if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c));

335 :デフォルトの名無しさん:2018/02/16(金) 20:12:13.91 ID:hi0D4ZsY.net
>>330
構造体のアラインメントでぐぐれ

336 :デフォルトの名無しさん:2018/02/16(金) 20:28:30.02 ID:Ja2iVc8/.net
328です
皆様情報ありがとうございました
構造体先頭から末尾までのmemsetとは事情が違うということが分かりました

offsetof()やダミーの構造体など、方針を見直します

ありがとうございました

337 :デフォルトの名無しさん:2018/02/16(金) 21:00:38.75 ID:hi0D4ZsY.net
だからアラインメントでぐぐれって・・・
それむこうにすればできるから

338 :デフォルトの名無しさん:2018/02/16(金) 21:26:52.07 ID:5NiD1AgL.net
328のセグフォはアドレスとポインタの違いが分からない時にやらかすミス

339 :デフォルトの名無しさん:2018/02/16(金) 22:05:59.54 ID:qDhjnryl.net
アライメント無視して詰め込むとミスってバスエラーになるからやらないな

340 :デフォルトの名無しさん:2018/02/16(金) 22:59:31.13 ID:IhCFworu.net
>>337
>>330のケースではアラインメントを無効化してもダメだろうよ

341 :デフォルトの名無しさん:2018/02/16(金) 23:35:42.63 ID:wAiK151t.net
>>338が正解だろう。アライメントは関係ない。

342 :デフォルトの名無しさん:2018/02/16(金) 23:47:57.54 ID:Ja2iVc8/.net
>>337
アライメントについては、OS、アプリ共に32ビットであり、
メンバも32ビットに揃える(パディングはさせない)ように
考慮されてはいるので、無効にしてみましたが変化はなさそうです

__attribute__ ((packed))付与有無でsizeof(aaa)としてみましたが、
どちらも4バイト×メンバ数となり、やぱりパディングは
されていないのかなと

>>338
構造体は、パディングに関わらず先頭以外の場所へmemsetやmemcpyで
触ってはならないのだろう、という思いに至り、方針を見直そうと思ったのですが
実際、書くとしたらどう書くことになるのでしょう
例えば、a〜zまで並べられているメンバ中、cからyまでゼロで埋める…みたいなので…

343 :デフォルトの名無しさん:2018/02/17(土) 00:10:47.04 ID:OoNlElF9.net
&aaa+1はaaaの外を指す

344 :デフォルトの名無しさん:2018/02/17(土) 00:34:30.85 ID:2kmwzB0g.net
>>342
構造体の途中をmemcpyとかで書き換えるのは問題ないよ。
>>333も指摘しているとおり、元のコードの問題はアドレスの計算が間違っていること。
&aaa+1なら、aaaの先頭アドレスに1を足した値ではなく、aaaの先頭アドレスにsizeof(aaa)を1つ分足した値になるよ。

345 :デフォルトの名無しさん:2018/02/18(日) 12:45:11.42 ID:SXTB1pky.net
C#の質問なのですがスレが他に無いのでここで質問させてください。

VisualStudio2017でDLLの作成をしようと思っています。
DLLプロジェクトのなかでSystem.ConsoleやSystem.IO.Pathクラスを使用したいのですができません。
「現在のコンテキストに 'Path' という名前は存在しません。」というエラーです。

コンソールアプリのプロジェクトなら問題なく使用できます。
どうすればDLLのプロジェクトでも使用できるようになりますか?

346 :デフォルトの名無しさん:2018/02/18(日) 13:17:23.84 ID:G+NN3epc.net
ふらっと C#,C♯,C#(初心者用) Part135
ttps://mevius.5ch.net/test/read.cgi/tech/1517749348/

C#, C♯, C#相談室 Part95
ttps://mevius.5ch.net/test/read.cgi/tech/1508180530/

あたりじゃダメなん?

347 :デフォルトの名無しさん:2018/02/18(日) 14:14:22.93 ID:SXTB1pky.net
>>346
すみません検索の仕方を間違えていたようです;;
そちらで質問させていただきます!お手数おかけしました。

348 :デフォルトの名無しさん:2018/04/09(月) 14:18:19.81 ID:lWok+NuwR
dynamic_castは使うなってよく言われていますが、例えば自作のGUIで
テキストやボタン、スライダーなどをitemクラスから継承して作ったとします
void button_click( item *object ) こんな感じのコールバック関数を作ったら
この関数内でボタンのメンバ関数などを使うためには動的キャストしないとだめですよね
どうするべきなんですか?

349 :デフォルトの名無しさん:2018/05/23(水) 20:32:19.60 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

17PZB

350 :デフォルトの名無しさん:2018/05/28(月) 09:03:11.75 ID:PxBGvXZO.net
c++のライブラリでこれと言った具体例ではないのですかマニュアル通りにやってもissueを見ても上手く動かせないものがあります
そういう時はどういう様に解決すれば良いのでしょうか?
おすすめのデバッグ方法などがあればよろしくお願いします

351 :デフォルトの名無しさん:2018/05/28(月) 10:00:59.91 ID:By7WF+qf.net
使用をあきらめる
とことん追う
コードを公開して助けを得る

352 :デフォルトの名無しさん:2018/05/28(月) 10:47:43.80 ID:PxBGvXZO.net
>>351
今までは使用を諦めていました
ライブラリごとにいちいち聞くのもあれなのでとことん追いたいなと思います
その追い方について何かアドバイスをもらえませんか?

353 :放置された蟻人間 :2018/05/28(月) 11:51:19.10 ID:gPZUZ1ZE.net
IDEを使ってビルド・ステップ実行すれば、素人でも実行の様子を観察できる。ただし、GUIのあるプログラムを調べるには、ブレークポイントを設定するなどの工夫が必要。

354 :デフォルトの名無しさん:2018/05/28(月) 12:55:09.72 ID:By7WF+qf.net
えらいレベルの低い内容だな
そういうレベルの事を聞いてる?

そもそもテンプレート以外はソースがなかったりするぞ

355 :デフォルトの名無しさん:2018/05/28(月) 13:03:18.27 ID:By7WF+qf.net
他の環境も使えるなら
まずは他の環境で試してみて
ライブラリ自体のバグか使う側の問題か
を切り分けするんだろうね

使い方の問題であれば
問題が発生する使い方と問題が発生しない使い方を色々と調べて差を縮めていって絞るとか

具体例が無いとアドバイスはなかなか難しい
環境とか何系ライブラリとかも定まらない?

356 :デフォルトの名無しさん:2018/05/28(月) 16:25:02.90 ID:XtA12iLy.net
>>353
今までコマンドでやっていたのでIDEもいいかもしれません

>>355
環境はlinux(WSLも含む)です
使うライブラリは公開されているものからされていないものまでありますが科学系の計算ライブラリが多いです
使用者が少なかったりかなり古いものだったりもするので情報を手に入れるのが難しく、自分でなんとかするしかない次第です

使い方が分からないというよりは実行ファイルを作るのが難しいというレベルです
最近困ったのだと、詳しくは分かりませんがおそらくリンク系のエラーでした
現時点では使える複数の環境はありませんが、安いPCを購入することは可能です
よろしくお願いします

357 :デフォルトの名無しさん:2018/05/28(月) 17:31:50.91 ID:RGX33ATB.net
インストール方法が分からないって感じかな
readmeとかドキュメントのインストール方法や依存関係の記述をきちんと読むとかそんなところじゃない?

358 :デフォルトの名無しさん:2018/05/28(月) 20:03:05.46 ID:OHc1BnnP.net
線形代数とか統計とか?
環境構築面倒だよね
複数のライブラリで同じライブラリを使ってるけど指定バージョンが違うとか

まあ頑張ってとしか

359 :デフォルトの名無しさん:2018/05/28(月) 22:45:18.72 ID:ODaUYYKL.net
>>357
探してみます
どれも「このライブラリを使うにはこのライブラリとこのライブラリが必要だよ」くらいしか書いてくれていなかった気がしますが

>>358
そういうのを組み込んだライブラリなどです
使用するだけでそこまで詳しくないので最初の構築が一番苦労しますね
どう頑張ればいいのかも分からないので本当に困ってしまいます

360 :デフォルトの名無しさん:2018/05/29(火) 07:22:04.45 ID:BUfBrikS.net
公開日時もヒントだよ。その日付よりも後に出たバージョンを使ってないってのが分かる
ビルドオプションがキーになることもあるからmakefileチェックするとか、
ソースからビルドしようとせずにバイナリ使って逃げるとか、
ひどいのになるとdebugビルドは無理でreleaseビルドするしかないなんてのもある
なんにせよエラー表示見ながら試行錯誤するしかない

361 :デフォルトの名無しさん:2018/06/03(日) 22:15:08.47 ID:wOsqZWyw.net
これから時間を掛けて プログラミング言語 つくるつもりです
一体どんな機能を加えようかと。
何かこれがほしい、あれは入れるな、とかあれば 意見ください

362 :デフォルトの名無しさん:2018/06/03(日) 22:24:50.41 ID:exGCEUzZ.net
自爆機能は男のロマン

363 :デフォルトの名無しさん:2018/06/04(月) 08:28:52.50 ID:K9p9OoRg.net
>>361
既存言語のいいとこ取り
なおダブスタも存在するもよう

364 :デフォルトの名無しさん:2018/06/04(月) 17:53:26.43 ID:IDOvlJIZ.net
C++もしくはC#と完全互換な機能がほしい

365 :デフォルトの名無しさん:2018/06/20(水) 22:08:55.83 ID:V2+8Up+b.net
Illegal instructionってエラーが出るんだけどどういう時に起こりますか?

366 :デフォルトの名無しさん:2018/06/20(水) 22:12:45.92 ID:deMJdxhR.net
メモリを破壊してIllegalなinstructionが実行されたとき

367 :デフォルトの名無しさん:2018/06/20(水) 22:16:31.34 ID:V2+8Up+b.net
はやっ!ありがとうございます
メモリ系ですか
パソコンによってこのエラーが出なかったりするのは何故でしょう?

368 :デフォルトの名無しさん:2018/06/20(水) 22:51:07.51 ID:AQ4yWUfz.net
新しいCPUの命令セットを使ったプログラムを古くて部分的にサポートされてないCPUで実行しようとしたときに起こる

369 :デフォルトの名無しさん:2018/06/20(水) 23:13:47.79 ID:V2+8Up+b.net
確かに古い方のパソコンでエラーが出ます!
あとおもしろい発見をしました
(this=this@entry=0x7ffffffec7a0)と該当エラーの行(例えば100行目)に出ているのですが
その100行目にdouble a = 2;と、エラーの起こさないであろう命令を入れてみました
しかし先ほどと同じ100行目のこの命令にIllegal instructionのエラーが出ます
どうやら100行目に命令があるということが問題のようです

どういうことでしょうか??

370 :デフォルトの名無しさん:2018/06/23(土) 13:29:59.85 ID:6TJT73Kw.net
スタック漏れか

371 :デフォルトの名無しさん:2018/06/24(日) 20:18:56.13 ID:iTeaU+33.net
>>369です
>>370
すみません勘違いしていました>>369は無視してください
どうやらただの足し算でIllegal instructionが出ているようです

372 :デフォルトの名無しさん:2018/07/04(水) 22:34:23.65 ID:gFgZc5FG.net
KS7

373 :デフォルトの名無しさん:2018/07/29(日) 21:29:27.59 ID:Xelx6XCB.net
普通にコンパイルするとダイナミックリンクになるプログラムをスタティックリンクにするにはどうすればいいですか?

374 :デフォルトの名無しさん:2018/07/29(日) 22:05:02.94 ID:k46/2Knz.net
普通にせずにスタティックライブラリとしてビルドすればいいw
IDEでの設定なり、コマンドラインオプションで指定できるでしょ

375 :デフォルトの名無しさん:2018/07/29(日) 22:10:06.65 ID:Xelx6XCB.net
あ!そういうオプションがありました
ありがとうございます

376 :デフォルトの名無しさん:2018/08/22(水) 22:37:09.89 ID:/ith9quv.net
共通暗号方式の DES を高速化する方法はありませんか?

377 :デフォルトの名無しさん:2018/08/22(水) 22:54:49.80 ID:O+8hSQqt.net
PC買い替える

378 :デフォルトの名無しさん:2018/08/22(水) 23:23:19.35 ID:/ith9quv.net
>>377
ハードウェアでDES処理しているもの、を探しているのですが…
もう売ってないですよね…

379 :デフォルトの名無しさん:2018/10/16(火) 17:29:53.23 ID:rnwRcPOp.net
DESではどうやっても体感できるほどの差にはならんだろ
よほどデカイか環境がプアじゃない限りは

380 :デフォルトの名無しさん:2018/11/24(土) 23:36:06.34 ID:a099dG+Gj
quadmath.h の__float128型で4倍精度計算がサポートされて
たんですねえ。GCCだけでまだ不完全な形だけだけど。

しかし,何でIntelプロセッサは内部的に10byte実数演算にして,
C言語?C++ではlong double型にしたんだろ? ややこしくなる
だけなのに。

科学技術計算用言語のFORTRANなんか50年くらい昔から4倍精度
実数演算をサポートしてるし、4倍精度用のライブラリを用意
している。4倍精度実数演算なんて必要ないと判断したのは
なぜ? 物理計算では普通に要求される精度なのに。

所詮・・・

381 :デフォルトの名無しさん:2019/01/26(土) 20:56:02.99 ID:FlqqakqU.net
大規模なC++のコードに対して、あるライブラリを追加したい。
そのライブラリのnew_tool(仮名).aファイルを
Makefile内のインクルードに追加すれば使える
らしいんだけど、具体的にどうMakeを書けばよいか教えてください。

382 :デフォルトの名無しさん:2019/01/26(土) 21:07:40.21 ID:exLOU4gz.net
「c++ include makefile」で検索!

116 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★