トップページ⇒tech
105コメント22KB

お前らがmalloc使う場面、オレに教えてみないか?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
いつ動的確保してんだよテメーラ
0002デフォルトの名無しさんNGNG
2get
0003デフォルトの名無しさんNGNG
多分2ゲット
0004デフォルトの名無しさんNGNG
2がほしい、、、
00052NGNG
勝ったw
00064NGNG
強かった
0007デフォルトの名無しさんNGNG
7辺り?
00082NGNG
何秒の差なんだろう
00094NGNG
2,3秒か?
00104NGNG
11ゲットか?、、、、、
00114NGNG
ぐわぁ。悲しかった
0012デフォルトの名無しさんNGNG
動的に12げっと
0013デフォルトの名無しさんNGNG
・・・と、このように入力の数が不確定なときにですね
0014デフォルトの名無しさんNGNG
14ゲット。あきた
0015デフォルトの名無しさんNGNG
母をたずねに、mallocは3000里の旅に向かいました・・・。
0016デフォルトの名無しさんNGNG
ミスターmalloc()の超魔術
0017デフォルトの名無しさんNGNG
realloc(&>>1,sizeof(>>17)+1);
0018デフォルトの名無しさんNGNG

while( malloc(1) ) {
  printf(">>1は氏ね\n");
}
0019デフォルトの名無しさんNGNG
>>18
せっかく確保した領域がたったの1バイトとは、、おまえもちっちゃい人間だな
0020デフォルトの名無しさんNGNG
reallocで済むのにmallocとかcallocとかfreeとか使うなよ。
002120NGNG
callocの代わりは出来ないか。
0022デフォルトの名無しさんNGNG
>>1
まあmalloc使わなくてもいい言語つかえばらくなんだが。
そうも逝かない仕事をしているのか?
0023デフォルトの名無しさんNGNG
そういえばmalloc使うことって無いな。
PCとかメモリを十分使える環境ならC++使うし、
組み込みとかメモリが無い所では動的に確保したりしないし。
00241NGNG
>>22
いや、オレ自身もほとんど使った事無いから他のやつらはどうなのか、と聞いてみたかっただけだ
0025デフォルトの名無しさんNGNG
おまえはC言語をほとんど使った事ないだろ。

この時期はちょうど大学でmallocを教える時期だね。

0026デフォルトの名無しさんNGNG
>>1
mallocはDIBを操作する頃になると
やけに、多発する。
メモリリークも。
自在に幅を変えられるので、
複雑なソースに重宝する。(僕は)
0027デフォルトの名無しさんNGNG
26=1
よく調べたねw
0028デフォルトの名無しさんNGNG
C言語でFFTとかフィルタつくるときはmallocないとちとつらいかな。
002926NGNG
僕は>>1じゃない。
信じてくれーーー
0030デフォルトの名無しさんNGNG
>>25
なるほど。今はmallocの季節ですか。
他の季節を関数名で表現するとどうなるんだろう
0031デフォルトの名無しさんNGNG
>>26=GUIライブラリスレの>>7=>>14
003226NGNG
>>31
良くわかったね。
DIB関係で?
0033デフォルトの名無しさんNGNG
>>1
C++ の new 使へ。

↓↓↓ 以下 enum の使いでについて語ってくれ ↓↓↓
0034デフォルトの名無しさんNGNG
使うときないんじゃない?
#defineの方が絶対いい。
0035デフォルトの名無しさんNGNG
無料ゲーム↓
http://www5b.biglobe.ne.jp/~ryo-kyo/yumesuzuna.html
0036デフォルトの名無しさんNGNG
Javaやってるとメモリに対する意識がCのときとくらべ格段に薄くなってしまった。
それでも不要になったオブジェクトにはnullったりするように心がけてますよ。
System.gc()とかも使ったり
0037名無し@沢村NGNG
おまいらよ、mallocでヒープ領域を確保するのはいいが、まさか同じ関数の中でmallocでメモリを確保してfreeで開放しているバカはいないだろうな?
いたら返事してみろ?
いいかmallocは関数を抜けてもそのメモリが消えないようにするために使うもんであって、freeは別の場所で使うもんなんだよ!!わかるか?
おまいらよ、わかるかな?
0038名無し@沢村NGNG
おまいらよ、mallocでヒープ領域を確保するのはいいが、その際メモリ内に含まれる「予約ビット」のことは考えているか?
「予約ビット」というのはメーカーが将来の予約のためにメモリ内の一部のビットを確保しているもので、プログラマが使用してはいけない領域なんだよ。
この「予約ビット」にアクセスするとプログラムが暴走したりシステムがハングしてりして大変危険なんだよ。
また「予約ビット」はメモリ何のどこに置かれているかはメーカーによってまちまちで、例えばmallocで1000バイト確保した場合その1000バイトの中に入っているかもしれないんだよ。
このようにひとくちにmallocでメモリを確保するといっても「予約ビット」というおまいらには予想もつかない落とし穴があることを忘れるな!!!
0039デフォルトの名無しさんNGNG
ふつー mmap
0040デフォルトの名無しさんNGNG
>>37-38
沢村の誤解を招く発言を訂正します。
沢村のはC++の話なので、
Cの方がブロック内の最前でしか変数を宣言できないことを知りません。
また、予約ビットなんて気にしてたらmallocどころか[]←さえ使えません。
そんなのはOS,コンパイラに任せてあげてください。
沢村の話はビル・ゲイツ関連だけ信じるように。
0041デフォルトの名無しさんNGNG
沢村はM$信者か?
0042popoNGNG
僕は、制限あることがきらいなのでいつでも動的メモリーを確保(w
なぜなら、後で拡張性を考えずにすむから。
常に∞を意識してギリギリ限界まで自由に使いたいというのが漏れのポリシー。(w
mallocもnewもお気に入り、常に使いまくっている。
おかげで、メモリーリークをよく起す(w、いや、起していた。
天井のある部屋なんてつまらないだろう?そう思わないか?
0043bloomNGNG
http://homepage.mac.com/ayaya16/
0044デフォルトの名無しさんNGNG
>>42
それはやりすぎ。
004544NGNG
暇なんで調べたら
//a.c
#include<stdlib.h>
int main(int argc,char**argv)
{   char S;           }
//実行形式(コンソール)47,104 バイト

//b.c
#include<stdlib.h>
int main(int argc,char**argv)
{   char *S=(char *)malloc(1);  }
//実行形式(コンソール)47,104 バイト

//c.c
int main(int argc,char**argv)
{   char S;            }
//実行形式(コンソール)47,104 バイト
だった。
0046デフォルトの名無しさんNGNG
>>42
それ業務でやったら瑕疵責任賠償モンだぞ
0047デフォルトの名無しさんNGNG
予約ビット?なにそれ。C++にそんな制限あるの?
予約ビットのために、数MB/GBのメモリの中の数bitを適当に確保するだなんて、、、阿呆な仕様だな。
>メーカーが将来の予約のためにメモリ内の一部のビットを確保しているもので、プログラマが使用してはいけない領域
>例えばmallocで1000バイト確保した場合その1000バイトの中に入っているかもしれないんだよ。
仮にあったとしても、メモリ管理もOSの仕事かと。そんな大切なものをheap領域に置くほうが悪い。
っていうか何のための予約ビットなんだかわからない。

...あ、ごめん。沢村の脳内コンピュータの話をしてるなら、多分いいんだろ。
一般的なコンピュータ使っている人間は気にする必要なし。
0048デフォルトの名無しさんNGNG
キチガイにマジレス?
0049デフォルトの名無しさんNGNG
>>47
ここまでメチャクチャ言われると反論したくなる
気持ちはわかる。けど、やめれ。
つけあがるから。永遠に続くぞ。while(1);のように
0050 NGNG
Cで多態を実現するときとか使わない?
struct Base {...};
struct Hoge{struct Base;...};
struct Foo{struct Base;...};

Base *aBase = CreateBase();
Base *aHoge = CreateHoge();
Base *aFoo = CreateFoo();

aBase->doSomethig(aBase); //doSomethigはDoSomethig_Base()へのポインタ
aHoge->doSomethig(aHoge); //doSomethigはDoSomethig_Hoge()へのポインタ

こんな感じ。
0051デフォルトの名無しさんNGNG
昔、漏れが初めて読んだCの入門書には、malloc()の事が
一言も書かれていなかった。

それから数ヶ月の間、人並みにmalloc()する事は漏れの憧れだった。
0052デフォルトの名無しさんNGNG
入門書には書いてないよな
0053デフォルトの名無しさんNGNG
C++で配列を返す関数の作り方がわかりません。

class A;

A*
ACreater::CreateA()
{
 static A a[10];

 return a;
}

だとだめです。たすけてくらさい。
0054デフォルトの名無しさんNGNG
マジレスすると
mallocとreallocは
postgresでデータを取るときに使うがな
データは可変だから文字列とか動的に取らないといけないわけ
まぁ静的に取ってもいいがオーバーフローになったらいやだし
マジレスしてみた
0055デフォルトの名無しさんNGNG
扱うデータが可変の場合は malloc() 使う・使いたい。
#newでもよし
0056デフォルトの名無しさんNGNG
>1
ファイルを1回で全て読むとき。

>誰か・・・。
質問。
僕はよく、外部でfreeを要求するような関数を書くんだけど、
こういうのはやばい??
それともしっかり説明付けとけばOK?
もう一個、ローカル関数をリターンするのはNG?(Cの場合)
0057デフォルトの名無しさんNGNG
でかいワーク確保する時に使うなぁ・・・。
自動変数で宣言したら、スタックオーバーフローしちまうよ。
静的に確保したおいたら、プログラム自体が莫大なサイズになるし。
0058デフォルトの名無しさんNGNG
>>1
基本的なことだが
予め個数の予想できないデータ群を保持するのに
リスト構造とか必要にならない?
0059デフォルトの名無しさんNGNG
>>56 僕はよく、外部でfreeを要求するような関数を書くんだけど、
こういうのはやばい??
それともしっかり説明付けとけばOK?

free()を内包した関数を用意して、その関数とセットで使わせる方がいい。

>もう一個、ローカル関数をリターンするのはNG?(Cの場合)

意味不明。Cは関数内で関数を定義することができない。また動的に関数を定義することもできない。
static 関数のポインタをリターンする事を言ってるのか?だとしたらそれはOK

0060デフォルトの名無しさんNGNG
Accessでデータベース処理やってる分にはmallocなんて使わないな
データ入力したら勝手に新たに領域確保してくれるし
自分で拡張の処理をコーディングする場面なんてないし
0061デフォルトの名無しさんNGNG
http の POST データを入れる箱として。
0062デフォルトの名無しさんNGNG
xmlやhtmlを走査するとき。
0063デフォルトの名無しさんNGNG
>>42みたいのに青天井を要求された時。
0064デフォルトの名無しさんNGNG
メモリ確保・開放カンペキ!と思ったらピューリファイとかかけたら
リークしまくりだった。がっかり。
0065デフォルトの名無しさんNGNG
>59
遅くなったけど、thx!
専用の破棄用関数をつくるわけですな。
なるほど。
あと、関数じゃなくて変数でした。すいません。
0066デフォルトの名無しさんNGNG
mallocってどう読んでる?
0067デフォルトの名無しさんNGNG
マポーフィック?
0068デフォルトの名無しさんNGNG
マーロック
和訳:岩男
0069デフォルトの名無しさんNGNG
エムアロック。
マロック。

alloc:割当てる, 充当する(by goo)
だってさ。
0070デフォルトの名無しさんNGNG
メモリアロック
0071デフォルトの名無しさんNGNG
「やべぇ!コンストラクタがプライベートだ!」
0072デフォルトの名無しさんNGNG
漏れの肛門もパブリックにされそうです。
0073デフォルトの名無しさんNGNG
>>71
シングルトンスレへ。
0074デフォルトの名無しさんNGNG
マイルフィック?
0075デフォルトの名無しさんNGNG
ガムシロップ
0076デフォルトの名無しさんNGNG
ちょっと小腹が空いた

そんなときに malloc()
0077デフォルトの名無しさんNGNG
画像系のプログラム書くとよく使うね.
g++だと関数内で変数の大きさの配列を確保できるんだけど,
VC++とかはできないし.
// int Hoge[ iSizeX ][ iSizeY ]; とか
// iSizeX, iSizeYはint型の変数

で,私はエムアロック,リアロック,シアロックと読みます.
0078デフォルトの名無しさんNGNG
>>77
> // int Hoge[ iSizeX ][ iSizeY ]; とか
> // iSizeX, iSizeYはint型の変数

やっぱりスタックオーバーフローを避けるためにも
どのコンパイラでも

int *piHoge = (int*)malloc(sizeof(int) * iSizeX * iSizeY);

とした方がいいよ
C++なら

int* piHoge = new int[iSizeX][iSizeY];
0079デフォルトの名無しさんNGNG
マローク
0080 NGNG
>>78
配列に対してnewするのは嫌だYO
0081デフォルトの名無しさんNGNG
>>78
C++でも、クラスのインスタンスを作るとき以外(単純なintの配列とか)には
みんなmallocを使う漏れは逝ってよしですか?
0082デフォルトの名無しさんNGNG
>>81
逝ってよし
0083デフォルトの名無しさんNGNG
::operator new()にしとけ
0084デフォルトの名無しさんNGNG
えっと、これはnewだからdeleteで、これはmallocだからfreeか・・・なんて面倒じゃん。統一しようよ。
0085デフォルトの名無しさんNGNG
C++ で、コンテナクラスライブラリ(可変長文字列/配列)使っていたら、
malloc なんか使う機会無いはずだぞ。みんな new で済むはず。

0086デフォルトの名無しさんNGNG
>>81
>(単純なintの配列とか)には

配列ってそんなに頻繁に使うかなー?
CからC++に移行してから配列変数はあんまり使わなくなった
STLのコンテナクラス、stringクラスとか使うほうが便利なんで
0087デフォルトの名無しさんNGNG
>>86
何があってもchar *を使わないで下さいね。
0088デフォルトの名無しさんNGNG
>>86
いまどき使わんて・・・
0089山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0090デフォルトの名無しさんNGNG
sage
0091デフォルトの名無しさんNGNG
>>87
char * は配列変数じゃないんだよね
0092デフォルトの名無しさんNGNG
そーいや俺、
malloc使ったことねーや
0093デフォルトの名無しさんNGNG
俺も。いつも全てreallocですましている。mallocもfreeもいらねぇ。
0094デフォルトの名無しさんNGNG
ぐわぁ。悲しかった
0095山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0096山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0097デフォルトの名無しさんNGNG
Windowsにsbrkはないですよね
Windowsで独自malloc作った人いますか?
0098デフォルトの名無しさんNGNG
>>97
Microsoftが作ってるよ。
0099デフォルトの名無しさんNGNG
>>98
ネタですか?
0100デフォルトの名無しさんNGNG
win32のヒープには自動拡張オプションがあるからsbrkは不要
0101デフォルトの名無しさんNGNG
自己参照構造体の場合はよく使うが。
0102デフォルトの名無しさんNGNG
クラスでラップして隠すとか。~CDate(){free(_lpDate);}
0103デフォルトの名無しさんNGNG
char *str;

str=(char*)malloc(112);

str="abo--n";
0104山崎 渉NGNG
(^^)
0105山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
■ このスレッドは過去ログ倉庫に格納されています