筆者は「日経ソフトウエア」というプログラミング雑誌で記事の執筆と編集をしている。先日,C言語にターゲットを絞った特集を企画・担当した。記事は無事校了し,今はこの特集を収録した2008年11月号が書店に並んでいる。 C言語の特集を企画した理由はただ一つ,C言語を学ぶことによって,プログラミングに関するより深い知見を得られると強く感じたからだ。筆者自身,C言語に不案内で苦手意識を感じていたので,その思いは余計に大きかった。同時に,だからこそ,筆者同様にC言語の経験が比較的少ない人,そしてこれからC言語を...
- 質問する
- さがす
(8人の評価)
- コメント数 (6)
- クリップ数 (0)
- アクセス数 (1762)
-
- fujiyoshisyouta
- 投稿時間:2008/10/03 16:47
C言語はプログラマがたしなむべき教養になったのではないか
- コメント
- 外部サイトでの評判
-
- durian 投稿時間:2008/10/03 18:47
ポインタ、やりましたねー ポインタのポインタとか。ポインタを使ってリスト構造を使ったりしましたね。 メモリをfreeする順番を間違えると、二度とアクセスできないメモリ空間ができてしまったりして・・・・ 親関数から、子関数を呼んだときに、そちらでmallocして関数の実行が終わって、処理が親関数にもどってきたら子関数で確保されたメモリって自動でfreeされるんでしたっけ!??
-
- takanowo 投稿時間:2008/10/04 00:18
親関数から、子関数を呼んだときに、(省略)freeされないと記憶していますが、あまり自信ないです・・・。 子関数から戻る直前に子関数の中でfreeするのが礼儀(?)だったような・・・。 ・・・ さすがに長年触ってないと忘れてしまいますね・・・。
-
- sendredirect 投稿時間:2008/10/06 01:39
全く記憶していなくて、全く自信がないですが、自動でfreeされないでしょう。 関数抜けるとfreeされる仕様だと仮定すると、大きなメモリを必要とする処理は、すべて同じ一つの関数内に集めることになります。イメージ的にはでっかいmain関数とか、もしくはmallocばっかり並んでるmain関数とかって感じですね。 そして処理の過程で、子くらいならまだしも、孫関数で動的にメモリ確保が必要になり、それが継続して確保し続ける必要がある場合は、「いったん戻って確保して確保して、また孫の階層で処理する」「孫で必要になるかもしれないからとりあえず確保しておいてから関数を使い、必要なかったら戻ったところでfreeする」なんか変です。 これが、はじめの仮定(仕様)を変えることで楽になれるなら、言語仕様の方を変えたいですよね。 そして、そんなコードを書いた記憶はありませんよね?
-
- durian 投稿時間:2008/10/06 09:45
takanowaさん、sendredirectさん、ありがとうございます。やはりされないですよね。 確かに、子や孫では、その関数の処理が終了しても持ち続けないといけないようなメモリを確保するのは、おかしいですね。子のほうで終了前にきちんとfreeしとくということですね。
-
- fujiyoshisyouta 投稿時間:2008/10/06 10:11
親関数から、子関数を呼んだときに、そちらでmallocして関数の実行が終わって、処理が親関数にもどってきたら子関数で確保されたメモリって自動でfreeされるんでしたっけ!??一般的には解放されないでしょう(Cが使える環境すべてを知っているわけではありませんので、一般論です)。言語仕様がそうなっていたかと記憶します。 ちなみに、Visual C++標準のライブラリですと、malloc()した領域は、プロセスが「正常に」終了した時点で自動的に解放されます。 (上記ライブラリのmalloc()関数が内部的に使用している、HeapAlloc()というWindows APIの仕様による) 他の処理系については、ちょっとわかりません![]()
-
- durian 投稿時間:2008/10/06 23:16
fujiyoshisyoutaさん、ありがとうございました! でも皆さん既にC言語現役ではないのですね![]()
こちらの記事もどうぞ
カタログ
| Eclipse | |
|---|---|
| Microsoft Visual Studio | |
| NetBeans | |
| Xcode | |
| C++Builder | |
| PellesC | |
| GNAT Programming Studio | |
| jGRASP | |
| KDevelop | |
| MonoDevelop | |
| GHS MULTI | |
| Qt Creator | |
| Rational | |
| Sun Studio | |
| Turbo C++ | |
| wxDev-C++ | |
| Geany | |
| Dev-C++ | |
| Codelite | |
| Code::Blocks | |
| Anjuta |
![参加型テクノロジーメディア [okyuu.com] 参加型テクノロジーメディア [okyuu.com]](/images/logo/news_ja.gif?1238565893)










