2009-04-01から1ヶ月間の記事一覧

メモリリーク

「BINARY HACKS」に、メモリ関連のデバッグに使える「valgrind」の紹介があった。おもしろそうだったのでメモリリークの練習(ってなんや)をやってみた。まずはUbuntuで「aptitude install valgrind」とインストール。入れたのはvalgrind-3.3.0-Debianで、…

連結リスト続き

面倒くさくなって放置していた連結リストに、欠ていた関数を足してみた。連続してノード削除を行うとSEGVが出ていたDeleteNodeは、消した後のカーソル(list->cursor)を後ろのノードに持っていっていたため、実はいちばんお尻のものを消そうとしたときにカ…

ruby本体にメソッドを足してみる

Rubyのオープンクラスというのは、メソッドを勝手に足していいってことらしいので、RubyレベルとCレベルの2通りの方法でやってみた。Cのほうは破壊検査的な学習法かも。Numeric#dividable?というメソッドがあってもいいだろうと思って、 class Numeric def d…

循環小数

自明の問題はつまらないので、ちょっとぐらい難しい奴をやろうと思って、正解者数が少なめの「d循環小数の最大循環桁数は?」というのを探してみた。オイラープロジェクトの26問目。そんなに難しくないだろうと思ったけど、いろいろ考え出すと単純じゃないこ…

オイラープロジェクト

このところRubyを触っていなかったので、Project Eulerを少しやってみることにした。 Problem 1 10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の 4つがあり、 これらの合計は 23 になる。 同じようにして、1,000 未満の 3 か 5 …

初めてのgdb

実はデバッガなんてEmacs Lisp用に標準搭載されているものを起動したことがある、という程度で、ぜんぜん使ったことがないのだけど、jnishinoさんのすすめに従ってEmacsのgdb-modeを起動してみた。まず先に、gcc -gで、デバッグのための情報を含むa.outを作…

動いてるように見えて動かない

連結リストから、検索してヒットしたノードを削除するために、カーソルが示すノードを消す関数を書いてみた。面倒に思えたけど、その面倒だなという感覚はポインタの記法に対する不慣れから来るだけという気がする。やるべきことは単純。 void DeleteNode(Li…

ノードの削除は単純じゃないのか

ノードを探索する関数を追加してみた。list.cursorが指してるノードを削除する関数も書こうと思って、あれれと思った。一方向の連結リストだと、直前のノードがたどれなくて*nextを書き変えられないじゃないか。なんだっけなと思ってテキストを見たら、*pre…

線形リスト

テキストを見ながら線形リストを作ってみた。Dataは図形の円を意識してるけど、まあ何でも一緒。何だか混乱しそうになったので、あらかじめ図を描いたけど、大事なのは図よりも命名法の統一とか、どういうときに値渡しにするのか参照渡しにするのかの基準を…

whileとfor

線形リスト処理の続き。初期値を設定してwhileを使うよりも、forでやったほうがいいような気がして、次のように書き換えた。たぶんコンパイルされると同じことだろうけど。 Node *node = list->head; while (node != NULL) { PrintData(node->data); node = …

Xlibとか

ここのページを参考に、もう少しXlibを見てみた。keysymを受け取って、それで線を引いたり消したりすることを考えて、次のようにコードを足してみた。 while(1) { XNextEvent(disp, &evt); : : if(evt.type==KeyPress&& XLookupString(&evt.xkey,text,255,&k…