[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/19 06:51 / Filesize : 249 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇)



1 名前:デフォルトの名無しさん [2006/05/04(木) 08:53:09 ]
入門者向けの俺に聞けスレです。
なんでもきいてよね

651 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 19:14:34 ]
主観

652 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 21:21:28 ]
相対的なもんじゃね。

653 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:04:21 ]
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない?

pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、
malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。

654 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:06:35 ]
各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。
ただし、三重にネストしたforループを使う事。

#include<studio.h>

main()

  int x,y,z;

 for( z = 1, z <= 500 , z++ ){
  for( x = 1, x <= 500 , x++ ){
   for( y = 1, y <= 500 , y++){
    if( pow(z,2) == pow(x,2) + pow(y,2 ))
     printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}}

 return0;



上記で合ってますか?


655 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:15:42 ]
宿題スレで会おう!

656 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:21:42 ]
>>655
スマソ
サンクス

657 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 01:57:58 ]
ちょっと質問です。

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;
と同じでしょうか?

あと、

a = b ? c = d : e = f;

a = (b ? (c = d) : (e = f));

ですか?

どうも3項演算子の優先順位が今ひとつ…。
括弧つけろってのは別の話ということで、
よろしくお願いします。



658 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 02:11:37 ]
www.google.co.jp/search?q=%E6%BC%94%E7%AE%97%E5%AD%90+%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D

で、その式はコンパイル通るのか?

659 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:13:57 ]
>>658
VC6で試したけどコンパイルは通りました。

たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。
なら、そのまま解釈すると

a = b ? c = d : e = f;

a = (b ? c) = (d : e) = f;

a , b ? c , d : e , f;

a , (b ? c) , (d : e) , f;

こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。

a , b ? c , d : e , f;
これは、
(a , b) ? (c , d) : (e , f);
こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから
ありえない。実際動作もそうなってはいないようです。

で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?

ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。

グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。

よろしくお願い致します。





660 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:28:04 ]
>>659
a = b ? c = d : e = f;

a = (b ? (c = d) : e) = f;

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;

だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。

661 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:12:54 ]
>>660
どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、
b ? c = d : e = f;
これはご教示に従えば

(b ? c = d : e) = f;

こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、
e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか?

(b ? c = d : e) = f;

(c = d) = f;

(c) = f;


bが真のとき、実際に挙動を見てみると、

b ? (c = d) : (e = f);

こうなっているように思えるのです。なので、

a = b ? c = d : e = f;

このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。


662 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:13:39 ]

改行が多いみたいで、上の続きです。

a = (b ? (c = d) : e) = f;
a = b ? c = d : e = f;

これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、
追試していただけないでしょうか?

お手数ですが、よろしくお願い致します。






663 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 10:33:12 ]
(b ? c = d : e) = f; ってコンパイル通るか?
三項演算子は左辺に置けないと思うんだけど。

664 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:11:47 ]
ちと勘違いしてました。VC6でWinMainで試してました。
C++だと変数の参照を返すからコンパイル通るんだ…。

ここはC言語スレでしたかorz

たしかにCだと
b ? c = d : e = f;

これは書けませんね。

ただ、演算子の優先順位というに点だけ着目すると、Cでは
(b ? (c = d) : e) = f;
こうなって左辺値に不適合でエラー

C++だと
b ? (c = d) : (e = f)

このように実動作しているようです。直感的にはC++流の解釈の方が
素直な気がしますが、三項演算子の コロン以降だけを特別処理している
気がしてならない…。

スレ汚し失礼しました。C++スレに行って来ます。

665 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:13:34 ]
言語の優先順位に頼った可読性の悪いソース書くなよ。
括弧使え括弧。


666 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:24:20 ]
>>665
ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。

667 名前:初心者 [2006/07/06(木) 10:08:35 ]
初心者レスですよね?!心優しい皆さんよろしく!!
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??


668 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:47:59 ]
むり

669 名前:デフォルトの名無しさん [2006/07/06(木) 13:05:30 ]
FreeBSDやMac OS Xならば、
  fpurge(stdin)
で入力バッファに入っている文字を落とせる。

これが無いとちょっと面倒だけど、とりあえず改行文字まで
落としたかったら
  while(getchar() != '¥n');
でいいんじゃない?



670 名前:初心者 [2006/07/06(木) 13:06:42 ]
何が無理?


671 名前:初心者 [2006/07/06(木) 13:13:37 ]
>>669御免初心者なんで、FreeBSD<<わからない。
例として:
#include <stdio.h>
int main(void)
{
char gg[22],*gu;
char hh[33],*jj;

printf("数列入れて>\n");
fgets(gg,22,gu);
printf("数列いれ>\n");
fgets(hh,33,jj);

getc(stdin);
}
数列を多い目に入れると、次の入力ができない。


672 名前:もはもは [2006/07/06(木) 13:14:46 ]
HELPです!!!!!

1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。
さらに int eval[3]という1次元配列を用意して
eval[0] には0〜60の数の個数
eval[1]には61〜80の数の個数
eval[2]には81〜100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。

よろしくお願いします。

673 名前:デフォルトの名無しさん [2006/07/06(木) 13:29:23 ]
>>671
どうゆう入力を想定してるの?

674 名前:デフォルトの名無しさん [2006/07/06(木) 13:32:11 ]
>>671
fgets(標準ライブラリのものと仮定)の使い方が間違ってる。
標準入力から入力して欲しいのなら、

fgets(gg, 22, stdin);
fgets(hh, 33, stdin);

のように書かなくては。

675 名前:初心者 [2006/07/06(木) 13:54:51 ]
>>673
プログラムの一部なの。(全体は汚いプログラムなので見せない><)
まぁ、かんたんに言えば、
キーボードから入れた文字を好きな所まで取り
オーバーしたものは消す方法。
神様、私の願いを!!!

676 名前:デフォルトの名無しさん [2006/07/06(木) 14:09:56 ]
何が言いたいのかよくわからん。
Cより前に日本語をちゃんと勉強しろよ。

677 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:17:55 ]
留学生か?>初心者

678 名前:初心者 [2006/07/06(木) 14:22:39 ]
勉強中です><(怒らないで);
(本当に外国人です!!!日本語下手で御免なさい><);
会社からcを無理やり勉強させました。
お願いします。

679 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:27:35 ]
english ok



680 名前:デフォルトの名無しさん [2006/07/06(木) 14:29:31 ]
・・・変数宣言って何・・・?

681 名前:初心者 [2006/07/06(木) 14:29:39 ]
むり!韓国語なら>>

682 名前:初心者 [2006/07/06(木) 14:36:10 ]
#include <stdio.h>
int main(void)
{
char gg[22],stdin;
char hh[33],stdin;

printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる
fgets(gg,22,stdin);
printf("数列いれ>\n");
fgets(hh,33,stdin);

getc(stdin);
}


683 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:51:10 ]
>>682
おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、
そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、
最後にヌル文字を入れる必要があるからです。

#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
char gg[22];
char hh[33];

printf("数列入れて>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(gg, '\0', sizeof gg);
strncpy(gg, buf, sizeof gg - 1);

printf("数列いれ>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(hh, '\0', sizeof hh);
strncpy(hh, buf, sizeof hh - 1);
}

684 名前:初心者 [2006/07/06(木) 15:09:57 ]
>>683
先に入れる所用意する事までは分かりました。
でもこれも限界がある(入力がbufの1024字超えれば)と思います。
(他にも使い所あるので><)
butに無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。

685 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 15:13:22 ]
ハードウェアのリソースが有限な以上
どんな入力にも対応するなんてのは無理。
そのために仕様が存在する。

686 名前:初心者 [2006/07/06(木) 15:20:06 ]
>>685
そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>

687 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:02:38 ]
CとJavaで、初心者が学びやすいのはどちらでしょうか?
最初に学ぶのはどちらがいいのでしょう…?
またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。
返信お願い致します。

688 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:11:10 ]
>>687
将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。

689 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:26:42 ]
>>688
そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?



690 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 20:35:08 ]
>>689
プログラミングでどのようなものをやるのかによる。

が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。

691 名前:デフォルトの名無しさん [2006/07/06(木) 20:52:14 ]
>>690
わかりました。ありがとうございます。

692 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:03:06 ]
でも1 + 1やx + yもいわゆる計算式ではないだろうか。

693 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:05:18 ]
>>692
ええ、計算式です。間違いなく計算をする数式です。

694 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:09:13 ]
>>692>>693
それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。

695 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:12:42 ]
>>694
その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。

696 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:18:31 ]
数学がさっぱりでもいいが、算数は必須。

697 名前:デフォルトの名無しさん [2006/07/06(木) 21:27:52 ]
>>695
私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。

レス参考にさせて頂きます。ありがとうございました。

698 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:31:17 ]
まずやってみたら?プログラミングがどんなことするか分かってない気がする

699 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 21:49:20 ]
ここにもチョンが湧いてるのか。
ミサイル発射の謝罪と補償を要求する!



700 名前:デフォルトの名無しさん [2006/07/06(木) 22:06:02 ]
ここの回答者の人たちは参考書は何を読んで覚えたんですか?
0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください

701 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 22:17:54 ]
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。
もう後輩に売っちまった。

702 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:42:13 ]
>>699
お前ひとりに直撃すりゃあ良かったのにな。

703 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:30:11 ]
在日は速く半島に帰れ!
また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。

704 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:33:22 ]
>>700
0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。

705 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:41:42 ]
>>703
憂さ晴らしは妥当な板でどーぞ

706 名前:初心者 [2006/07/07(金) 12:01:46 ]
>>699話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!

707 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 16:37:53 ]
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。

708 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 18:55:02 ]
>>706
いちいち反応するな。流せ

オレモナー

709 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:24:53 ]
>>706の「レス」に反応



710 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:39:50 ]
ごめんね、スレとレスの違いも分からなくて
ごめんね

711 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 23:44:17 ]
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんね、ごめんね、ごめんね、
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんしねごめんね、ごめんね、
ごめんね、ごめんね、ごめんね、ごめんね
ごめんねごめんね、ごめんね、ごめんね、

712 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 10:29:13 ]
チョン氏ね!

713 名前:デフォルトの名無しさん [2006/07/09(日) 00:22:08 ]
エンターキーが押されたかどうかの判定の仕方と、
スペースキーが押されたときの判定の仕方を教えてください

714 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 00:29:35 ]
環境に依存するからもうちょっと情報だして

715 名前:713 [2006/07/09(日) 00:37:55 ]
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。
OSはWindowsXPです。よろしくお願いします

716 名前:デフォルトの名無しさん [2006/07/09(日) 03:15:58 ]
VC++4.0でXP用のソフトを組んでます。
操作ミスなどで警告音を鳴らしたいのですが、
MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。
かといって、警告音のためにWAV作ったりするのも大変なので、
少しだけシャレた警告音を簡単に慣らす方法がありませんか?

717 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:24:07 ]
Beep()を沢山つかって音楽でも奏でてはいかが?
10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて
周りをちょっと驚かすぐらいはできるよ。

718 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 03:36:44 ]
適当に答えてみる。
>>713
標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。

719 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 04:20:51 ]
CでGUIアプリ作る方法教えてください



720 名前:デフォルトの名無しさん [2006/07/09(日) 05:49:53 ]
Cでかいたプログラムから命令(メッセージ?)送ると
グラフィックだけ出力してくれるサーバっぽいアプリケーション
ってないですか?


721 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:57:51 ]
X?

722 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 05:58:37 ]
あ、「Windows」の方が適切かな

723 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 06:12:09 ]
適当に答えてみる。
>>720
system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)

724 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 11:38:34 ]
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと?
普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。

少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。
どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。

常に入力を監視する。
スペースかリターンが押されたのを判定すればいい。
普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。

725 名前:713 mailto:sage [2006/07/09(日) 11:39:33 ]
適当な回答ありがとうございます。参考になりました

726 名前:デフォルトの名無しさん [2006/07/09(日) 11:56:05 ]
MS Visual C++ NET
BorLand C++ Builder6
てどちらが使いやすい?



727 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 22:16:51 ]
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら?
ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。

728 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 23:29:29 ]
>>726
単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!

729 名前:716 [2006/07/10(月) 01:26:04 ]
>>717
10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗



730 名前:デフォルトの名無しさん [2006/07/10(月) 01:36:13 ]
質問です。
「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。
エラーは以下の3つです。
文字列定数は1文字か2文字でなければならない。
,が必要。
文字列または文字定数が閉じていない。

宜しくお願いします。

731 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 01:41:01 ]
¥’

732 名前:デフォルトの名無しさん [2006/07/10(月) 03:17:38 ]
>>731
ありがとうございます!

733 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 12:36:59 ]
>>730-731
せめて半角で書いて欲しいとオモタ

734 名前:デフォルトの名無しさん [2006/07/10(月) 20:38:16 ]
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください

735 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 21:49:40 ]
typedef char CHAR;
typedef wchar_t WCHAR;
#ifdef UNICODE_
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
typedef TCHAR *PTCHAR;

736 名前:726 [2006/07/10(月) 21:50:19 ]
>> 728
サンクス

737 名前:デフォルトの名無しさん [2006/07/10(月) 21:58:42 ]
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。

738 名前:734 [2006/07/10(月) 22:08:03 ]
>>735
アリガ10

739 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:28:49 ]
>>737
putchar(112)



740 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:58:26 ]
そのまんまですな。

741 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:29:38 ]
ワロタ

742 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 02:33:22 ]
CでGUI?
WindowsならWin32
LinuxならGTK+
どっちもCライブラリ

743 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 09:08:17 ]
>>728
BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!

744 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 16:09:48 ]
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。

745 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 22:50:17 ]
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが
malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?

746 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:12:42 ]
>>745
確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。

けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。

747 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:19:17 ]
>>745
ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。

748 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 23:45:52 ]
>>746-747
そのルーチン覗いてみるのも勉強になるかもしれませんね。
とりあえず一般的な方法でしてみたいと思います。
ありがとうございました。

749 名前:デフォルトの名無しさん [2006/07/12(水) 01:01:46 ]
VC++なんですが、以下のように配列を定義しています。
signed short foge[]={
0x0001,
0x7fff,
0x8000,
0xffff
};


コンパイルするとマイナス値(0x8000と0xffff)で
warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。
というワーニングがでます。
C言語ではsigned 16bitを表す接尾子が無いようなんで、
キャストで回避するしか無いんでしょうか?




750 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:04:40 ]
素朴な疑問。
何故const signed shortにしないのだろう。
それはさておき、-0x8000, -0x0001ではダメ?

751 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 01:11:56 ]
>>749
よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef