C++相談室 part144

■ このスレッドは過去ログ倉庫に格納されています
2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
306305
垢版 |
2019/08/03(土) 18:26:53.75ID:dTS2sKLx
適用条件訂正orz
正: マクロ版のmin()、max()を使わない限りにおいてこれでおk、

インクルードしたヘッダファイルに含まれるマクロ版のmin()、max()に依存するマクロ経由で
間接的にマクロ版のmin()、max()を使おうとした場合はコンパイルエラーになるからワカル
そうなった場合の処置は知らんが、コンパイルが通ったら>>305の方法で安全なはず
2019/08/03(土) 18:29:09.20ID:3VuQ5ICx
一番安全なのはこれだってboostの長年の結論だから
max BOOST_PREVENT_MACRO_SUBSTITUTION (a,b)
2019/08/03(土) 18:29:45.19ID:eeu00PkY
マクロ版 min(), max() が #define されている状態でも、
#define smin (std::min)
#define smax (std::max)
としてしまえば、smin(a,b), smax(a,b) と書くだけで
それぞれ std::min(), std:max()
が使えるでしょう。
2019/08/03(土) 18:32:51.04ID:dTS2sKLx
>>307
正しいがIQが高すぐる答案

>>308
sminやsmaxという名前が衝突したらどうすんじゃ…
2019/08/03(土) 18:55:02.09ID:aqiFUikh
この手の無駄に一般化は大抵バグを引き起こす。
2019/08/03(土) 19:39:31.49ID:NDKzILOT
>>267
ふつうに std::cout << "hello, world!" << std::endl;
と地の文として書いていますが、そういうのは駄目なのですか?
2019/08/03(土) 19:47:04.82ID:M1zmWsZu
std::を書くと死ぬ人が発狂してるだけなので、std::を普通に書ける人にはしょうもない話
313デフォルトの名無しさん
垢版 |
2019/08/03(土) 19:50:41.99ID:XP2vdzkU
これはVisual Studio 2019のバグだろうか?
C++17想定。Wandboxでは問題なし。

namespace user::math::literals {
constexpr double operator""_deg(long double deg) {
return deg * 3.14 / 180.0;
}
};

struct Test {
template<typename T = double>
constexpr double test(T t) {
using namespace user::math::literals;
return 1.0_deg * 8.0;
}
};

int main(){
}

//error C3688: リテラル サフィックス '_deg' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_deg' が見つかりません

発生条件はクラス内テンプレート関数でユーザー定義リテラルを含んだ式
return 1.0_deg * 8.0;をreturn 1.0_deg;に変えると問題ない
2019/08/03(土) 19:58:09.36ID:M1zmWsZu
普通にビルドできたけどプロジェクトのC++言語基準をちゃんとC++17にしたか?
2019/08/03(土) 19:59:17.19ID:gpWi1Ho2
>>288-289, >>291-292
だからベクトルとかでもいきなり衝突するっつってんだろバカチンが
どんだけ経験不足なんだお前らは
2019/08/03(土) 21:04:27.05ID:3VuQ5ICx
using namespace はその名前空間の中の名前を私が責任持って現在の環境に導入しますという宣言だ
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない
2019/08/03(土) 21:27:39.99ID:dTS2sKLx
>>316
使われた側の未来のふるまいまで予測してnamespaceの中身を理解などしていられない件について:

namespaceの正しい使われ方の下では、aというnamespaceに将来どんな名前が追加されようとも
bというnamespaceの名前とは衝突しないはずである
ところがaとbをusing namespaceしてしまったが最後、誰にも責任が持てないカオスが訪れる

これはnamespaceが無かったころの言語に先祖返りするだけではなく、より悪い状況を招くことに注意。
namespaceの利用によって、open、close、copy、find、vector、list、string、.....といった「自然な」名前がいっぱい使用されるからである。

namespaceは崇高だが、using namespaceはそうされることを意図されたnamespace意外には邪悪すぐる
318313
垢版 |
2019/08/03(土) 21:32:17.54ID:xzejIjJP
>>314
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・

Visual Studio 2019 Community Version 16.2.0
2019/08/03(土) 21:38:58.27ID:M1zmWsZu
>>318
こっちも16.2.0で、ワークロードは「C++によるデスクトップ開発」のオプションに全部チェック
他はQtツール入れただけ
2019/08/03(土) 21:51:26.72ID:3VuQ5ICx
>>317
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
321317
垢版 |
2019/08/03(土) 21:51:59.64ID:dTS2sKLx
訂正;
語: namespaceは崇高だが
正: namespaceは崇高かもしれないが

>>316みたいな無根拠で実害のある精神論に後退するぐらいなら、
namespaceで修飾するかわりに接頭辞をつけた名前を使うという>>228な方策も現実の選択肢足りえる
>>228がネットをgrep my_fooして見つからなかったのは不幸な事故だが
2019/08/03(土) 21:54:29.31ID:3VuQ5ICx
>>321
同意した直後に正反対のこと言うのやめて?
316のどの辺が精神論で有害なのさ
C++だけの話でもなくて、pythonのimport * がカスと言われてるのと本質的に同じだろ
2019/08/03(土) 22:06:21.81ID:CM1VqrV7
>>316の精神論にはある意味同意するけどな
(ヘッダでの名前空間取り込みも、ある名前空間に別の名前空間を取り込む場合など、合理性があるなら設計上の選択の一つと言えるし
その辺は設計者の責任だと思う)

あと>>298, >>301はバカチンじゃなかった、すまんかった
2019/08/03(土) 22:09:28.81ID:bbhz9sWw
using namespaceの話はも止めたら?
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
2019/08/04(日) 00:06:21.11ID:gKArgCAM
ダメに決まってるだろw
Coding Standardの話なのにw
2019/08/04(日) 01:17:09.87ID:uuq2lSJI
どうでもいいだろ
C++のようなアレな言語を扱う上では些細な事さ
2019/08/04(日) 01:20:42.30ID:6uyvUJES
そもそもプログラミングは間違ったことを信じている人がはっきり損をする世界
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
2019/08/04(日) 01:21:14.60ID:uuq2lSJI
おれはね
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
2019/08/04(日) 01:59:42.19ID:xBRRtFJn
確かにどうでもいいな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
2019/08/04(日) 09:37:37.80ID:7855nA4b
>>327
正確にはそれをリカバーする人だがな。
バカはリカバーされて成り立ってることすら理解せず同じことを繰り返す。
2019/08/04(日) 18:06:02.62ID:24EQJs3u
min(), max() マクロのような件は別として、標準的なライブラリであるところの
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???

他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。
2019/08/04(日) 18:48:22.76ID:xBRRtFJn
個人の趣味プログラミングならご自由に
仕事ならコーディング規約にあわせる
コーディング規約作る立場なら、チームにバカが混ざってる前提で非属人的になるようにルールを設ける
で経験を積めば積むほど自分がバカであることが身にしみてわかる
そういうことだよ
2019/08/04(日) 18:54:59.65ID:UDvg82p4
>>331
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、

using namespace std;
#inlucde "...."

となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。
2019/08/04(日) 19:00:40.18ID:Rn2rET4f
>>333
ほとんど言いがかりレベルw
2019/08/04(日) 19:02:23.99ID:nZL08BTE
std::くらい書けで終わる話をいつまで続けるつもりだ
2019/08/04(日) 19:04:24.66ID:Is6FE1ys
>>335
10万行とかのソースでそれをやりますか?
2019/08/04(日) 19:06:21.58ID:UDvg82p4
>>336
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
2019/08/04(日) 19:06:25.70ID:nZL08BTE
やるよ
2019/08/04(日) 19:09:16.58ID:6Wul5V0e
普通頻繁に使うライブラリをusingするだけで、名前空間ごとはやらんだろ
chrono使う時はたまにやるけど
2019/08/04(日) 20:26:05.66ID:uuq2lSJI
ていうかstd::程度を書くのが面倒な人はC++向いてない
2019/08/04(日) 20:49:37.11ID:i35UY3P6
size_tにだけ頑なにstd付けない人いるんですがなにか理由あるんですか
2019/08/04(日) 20:52:21.46ID:Rn2rET4f
>>336
1ファイルが10万行じゃないだろ(1ファイルならそこから直せw)
2019/08/04(日) 20:54:10.96ID:Rn2rET4f
>>341
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
2019/08/04(日) 21:52:28.11ID:UDvg82p4
>>341
size_tはC言語時代から存在してるから、もともとnamespace関係なく使える
2019/08/05(月) 00:32:36.26ID:Al8hrMjU
むしろstdにsize_tあったんだくらいの認識
346デフォルトの名無しさん
垢版 |
2019/08/05(月) 02:02:36.01ID:LDivZuKg
おれも知らんかったなまぁ言われてみればたしかにそうだなsize_tってネィムスペィス上でも定義されてたのか今度から一貫性のためにstd::つけとこうかな
まぁ、editorのちょい設定いじるだけなんだがな(´・ω・`)
2019/08/05(月) 12:35:07.05ID:uXNLYXLK
>>340
そうでもない。
2019/08/05(月) 14:11:04.57ID:uXNLYXLK
>>342
1ファイルの行数は関係有りません。
要は大きなプログラムを書いているとき、string で済むところを
全ての箇所で std::string と書くのかということです。
void func(std::string &somename, int a, int b) {
std::string aaa;
aaa = somename + "abc";
}
struct Txxx {
 std::string name1;
 std::string name2;
 ・・・・
};
↑のようにタイピングするのは余り賢いやり方だとは思えません。
2019/08/05(月) 14:19:44.18ID:EKfu+tDr
そんなに面倒ならusing S = std::stringでもすればいいじゃん
2019/08/05(月) 14:24:57.77ID:nblSLoEW
過度に賢く振る舞おうとして滑ってるパターン
それくらい普通に書けばいいじゃん
2019/08/05(月) 14:27:04.00ID:xQVlfAfV
こういう奴って馬鹿丁寧に一文字ずつ全部打ってんのかね
補完って機能の概念がない世界に住んでんのかしら
2019/08/05(月) 14:51:04.49ID:nl2V9bb6
>>348ってジョルノっぽいよな
2019/08/05(月) 20:01:38.61ID:s1STjseD
>>348
> 1ファイルの行数は関係有りません。
> 要は大きなプログラムを書いているとき、string で済むところを
> 全ての箇所で std::string と書くのかということです。
俺は書く。

> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
2019/08/05(月) 22:09:13.72ID:B18jZANO
>>348
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
2019/08/05(月) 22:10:29.33ID:7u4aY/7T
>>348
だから何のために名前空間があるのかググれよ
別に好きにやればいいけどお前がいつもstd名前空間取り込んで便利だと思ってるのは
標準ライブラリしか使ってないからだ
2019/08/05(月) 22:17:59.20ID:vqN4pUkV
無駄だと思うならtypedefやusingすりゃいいじゃないか
そもそもstringって名前長すぎだろ
2019/08/05(月) 22:26:34.39ID:xngMWyKF
usingである程度の広さのスコープでやるんが正解だろ。
まあこのある程度の広さってのが人によってだいぶ違うだろうが。
2019/08/05(月) 22:37:46.60ID:vqN4pUkV
少なくともstdは普通using namespaceしないよね
でかすぎる
最近良くやるのは
namespace fs=std::filesystem;
だな

まあこれもヘッダで使うなら独自namespaceに入れてからだが
2019/08/05(月) 23:33:53.82ID:/t1yyPXk
using namespace std;をグローバルなスコープでやってしまうと
ソースコードを他に持って行ったとき困る
fooをstd::fooに変換するのはfooの種類が100台になると並みのエディタの置換機能では手間的にアウト
一方std::をとるのなら簡単にできる
std::をつけるのは将来への投資といえる
2019/08/07(水) 02:10:18.89ID:/mJrMLHD
初心者除ける、上級勘違い中級者こそ、出て行ってくれないかな。
本当の上級者は、プログラミング初めての人でも、優しくあたってくれますよ。
2019/08/07(水) 02:48:46.85ID:tJwlIUsZ
>>360=>>348
362360
垢版 |
2019/08/07(水) 03:17:50.31ID:/mJrMLHD
>>360 = not(>>348)
ですが。
証明方法は無いですから、わかりませんけどね。
363360
垢版 |
2019/08/07(水) 03:53:56.72ID:/mJrMLHD
>>342
各1万行30ファイルは、セーフですか?
2019/08/07(水) 08:04:40.03ID:go9nzBX4
入れ子となったクラスの内側のクラスから外側のクラスのprivateメンバにアクセスできるという
内側のクラスの特権はJavaやC#と同じくC++にもあるから、これを使って大規模なStateパターンでも書いた日には
ソースコードの行数も大規模にならざるおえない
このとき上記3言語の中で唯一大規模にならずに済むのはクラスの分割定義が可能なC#だけ
2019/08/07(水) 09:17:55.92ID:eqkXQjzY
まず日本語を勉強しましょう
2019/08/07(水) 09:31:41.35ID:ZWXmwdWw
昨今のプログラミング用語における入れ子は界隈に限らず日常的に使われているが
プログラミング業界では特に再帰的構造を指す場合にも多く使われる

そこに非常に現代的な特殊用語たる「出し子」が加わると
一般人は入れ子と出し子が対になっていると思い込む
2019/08/07(水) 09:45:33.66ID:Io4EJaZl
入れ子の内側のクラスは別ファイルに定義できる
2019/08/07(水) 09:55:09.68ID:FLvBFSJD
好きなだけわけてincludeすればいいじやん
2019/08/07(水) 23:36:21.14ID:gdjRebyd
スコープにあった変数名の長さにするべきとかそういうのお前らは習ってねーの?
2019/08/07(水) 23:50:58.34ID:db+FOt2P
そういう感覚的なルールいらない
チェックできないルールはなくていい
2019/08/08(木) 00:01:50.09ID:QQC8VFJ9
>>370
感覚的な部分を必要とすべきでないなら全てアセンブラで書けばか。
2019/08/08(木) 03:03:18.83ID:2Zq4F03j
>>370
チェック出来るルールに完璧に沿って書けてるボクちゃん偉い!エッヘン!
ってこと?
ユーザーからしたらクソの役にも立たねーよそれ
2019/08/08(木) 03:51:27.57ID:TsWml31+
errnoに謝罪しる
2019/08/08(木) 05:46:38.89ID:FTUf1Nuq
>>367
1行で2クラス以上定義しないという原則を守る限り、30億状態あったら外側のクラスはどうがんばっても30億行未満では書けない
この場合でも30億行未満で書けるのは分割定義できる言語だけ
また、内側のクラスを使わない普通のStateパターンなら30億ファイルに分割してかけばだいたいおk
(1状態から遷移し得る状態の数による。30億状態のどれにでも遷移しえる状態、
 みたいな極端なやつはさすがに遷移先状態クラスの#includeで30億行になるが

>>368
おk
2019/08/08(木) 06:53:52.07ID:5ZN2ymvH
頭悪そう
2019/08/08(木) 10:31:27.94ID:llWdm4EH
それは設計の問題でしょ
30億通りのstateパターンで設計する方が悪い
言語の問題じゃあないな
あり得ないヘンな例を持ち出してdisる詐欺師の方法だ
2019/08/08(木) 21:15:10.76ID:lDut6bjR
>>359
ファイル単位でそのまま使えや
コピペして改変部分があるとか当たり前のこと言うなよwwww
2019/08/08(木) 22:58:59.35ID:TsWml31+
コンパイル時に発覚する程度のエラーなら許容範囲でしょ。
2019/08/09(金) 00:11:55.59ID:LbUkdyT/
c++で想定外の場合にエラーメッセージとその行数を出して終了させたいのですが、
どのようにしたらできますか?
下記のようにしてもexitした行数が出ません。。

::fprintf(stderr, "error.\n");
exit 1;

perlのdie()のようなものをイメージしています。
2019/08/09(金) 00:39:22.71ID:Ps8ScE7S
::fprintf(stderr, "error. (line: \d)\n", __LINE__);
とか
2019/08/09(金) 22:56:01.92ID:nHekiGzf
丁寧にエラーメッセージ出すよりデバッガでバックトレースかけた方が早かったりするのは内緒
2019/08/09(金) 23:44:34.34ID:4GlakzRE
右辺値参照ってconst参照という認識でOKですか?
2019/08/10(土) 01:07:05.35ID:uRDSBt/F
>>382
moveで中身を奪い取るからconstじゃだめよ。
2019/08/10(土) 06:27:08.55ID:9vKRFOhk
>>381
そりゃデバッガ使える状況ならその方が速いことは誰でも知ってるだろw
385379
垢版 |
2019/08/10(土) 09:48:42.90ID:bGTBV06s
>>380
その方法で目的の動作ができました。
行の最後にexit入れたら一行でかけて良さげな感じです。
ありがとうございました。
::fprintf(stderr, "error. (line: \d)\n", __LINE__); exit(0)

>>381,384
バックトレースというものを知らなかったのでググりました。
色々なものがあるようですが、gdbの下記程度の使い方なら自分でもできそうなので
これをちょっとづつ使ってみようと思います。

ttps://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.html
2019/08/10(土) 15:57:01.40ID:lQ/anG82
ググってもなかなか出てこないが__LINE__はlong型だったと思った!
2019/08/10(土) 16:00:35.87ID:Azv7NalM
>>386
intじゃないの?
まあクロスの場合開発環境側のintな気もするが
2019/08/10(土) 16:25:20.56ID:SX6PRfyx
intでダメなファイルとかそもそもコンパイルできねーだろ。
2019/08/10(土) 16:36:59.44ID:Azv7NalM
2GBの¥nの後にソースかいてみるとわかるかなw
2019/08/10(土) 16:48:09.53ID:9vKRFOhk
>>387
> まあクロスの場合開発環境側のintな気もするが
そんなアホなw
2019/08/10(土) 16:57:47.58ID:Azv7NalM
いや、多分そこまで考えてないから、コンパイラ上ではintもしくはsize_tで
マクロ展開時は文字列化して接尾の型指定とかつけないだろ

勝手につけられると逆に困るし
2019/08/10(土) 17:01:16.99ID:lQ/anG82
int型はターゲットアーキテクチャーで一番自然な型というのが本来の意味なのでソースコードの最大行数と関係する理由が無い
C++の最新規格ではどうなったかわからんが、longは規格上32 bit固定なのに対してintは16 bitのアーキテクチャーが有り得るはず
2019/08/10(土) 17:02:52.50ID:sTg7TrG2
32bit固定?
2019/08/10(土) 17:06:31.95ID:Azv7NalM
longが32bit固定なシステムは64bitでは異端じゃね
まあwindowsはLLP64っぽいが
2019/08/10(土) 19:05:34.69ID:bGTBV06s
バイナリファイルを一度に読み込もうとしています。
圧縮ありファイルと圧縮なしファイルを以下のように判定して読み込もうとしているのですが、
ファイルの全てを読み込む方法がわかりません。
@Aはどのようにしたら良いですか?

http://codepad.org/FwYwQ62R
2019/08/10(土) 19:14:37.23ID:J81sqFQj
std::
これ自体は大した量ではないとは思うけど
これが何百何千と書かないといけないなら省略できる方法は必要だと思う
省略して且つ安全で簡単な方法が無いのが問題なんだと思う

ここまで読んででusing宣言を書き連ねたファイルを用意して
関数定義の次の行で#includeするのが今の所一番良い様な気がした

const何かも余りに書きすぎるので
これも何らかの形で省略できる記法を搭載できないのだろうかとは思ってる
classのpublic:
みたいに
const:
とかするとその後は記載しなくてもconst宣言になる
みたいな方法を搭載したりはしないのか?
と何時も疑問に思う
2019/08/10(土) 19:18:00.44ID:kKf7NMjX
>>395
malloc
2019/08/10(土) 19:26:04.25ID:jgcB4xBs
>>396
constこそusing書き連ねたファイル用意してincludeすればいいのでは

using cchar = const char;
using cuchar = const unsigned char;
using cint = const int;
using cuint = const unsigned int;
2019/08/10(土) 20:32:30.45ID:pnnBC1tu
>>396
その疑問の答えは、あなたが具体的な提案を標準化委員会に持っていかない理由の答えと同じでしょう。
2019/08/10(土) 20:36:22.66ID:qcH7oj7q
constじゃないのにmut書かされる方が面倒
2019/08/10(土) 20:51:51.67ID:TQTMDKQQ
c++20のimportで解決するだろうか。
2019/08/11(日) 00:40:56.64ID:khTmYGk1
>>397
ありがとうございます。
とりあえず圧縮なしの方は以下で取得できたようです。
ここで一点疑問です。
mallocの値がぴったり正しいかの確認をしようと、下記5行目のdatasize+1を-2や-3にしたのですが、
printf()で最後まで値が正常に出てきます。
datasize-3としてもたまたま連続して拾っているだけなので問題ありだと思うのですが、
malloc(datasize)ではなく、malloc(datasize+1)でぴったりメモリ確保ができているのでしょうか?

unsigned char* data;
long datasize;
fseek(fp, 0, SEEK_END);
datasize = ftell(fp);
data = (unsigned char*)malloc(datasize+1); // +1を-2, -3にしてもprintf()では最後まで正常な値が出てくる。
if( data == NULL ){
exit(1);
}
fseek(fp, 0, SEEK_SET);
fread(data, 1, datasize, fp);
fclose(fp);
for(int i=0; i < datasize; i++){
printf("%02x\n", data[i]);
}
2019/08/11(日) 00:49:51.23ID:KV8Qszx5
割り当てされてない領域に書き込むというのは、C/C++ではあり得る。
そこに他に意味のあるデータがあれば、そのデータは壊れる(データ破壊)。
2019/08/11(日) 07:16:49.27ID:bWvktEwN
>>402
処理系によるけど大抵の処理系では指定されたサイズをきっちり確保とかはしなくて16バイト単位くらいで確保する
なのでそのdatasizeの値によっては-15とかしても大丈夫な場合すらあることがある
もちろん動作は保証されない
2019/08/11(日) 08:16:38.18ID:8PrAFYrU
> malloc(datasize)ではなく、malloc(datasize+1)でぴったりメモリ確保ができているのでしょうか?
malloc(datasize)で十分、malloc(datasize+1)だと1つ余分
freadでもprintfでもdatasize個までしかアクセスしていないので
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況