実験してみた
メンバー向けトレーニングネタその1。delete this は危険に見えるが何を削除しているのか確認する。 class ClassA { public: void del() { delete this; } }; int main() { ClassA* ptr = new ClassA(); ptr->del(); // ダメな例 // ClassA test; // test.d…
ClassA の仮想関数 method() を継承した ClassB でオーバライドした場合でも ClassA のコンストラクタ内の method() は ClassA::method() を指している。これは vptr の初期化タイミングで説明できると思っていたが違った orz(以下、ubuntu 64bit 環境で試…
http://codepad.org/jnZoVbI1を見て試してみた。 #include <stdio.h> int main(void) { int x = 2; switch (x) { case 1: printf("1\n"); break; defautl: printf("other\n"); break; } return 0; } gcc でコンパイルは通るが結果が 1 も other も表示されない。-Wall</stdio.h>…
仕事で stdint.h 内部の typedef でコンパイルエラーになる謎報告があった。ログから推測して以下のような状況だったのだと思う。 #define uint32_t unsigned int typedef unsigned int uint32_t; .cpp ならば、 test.cpp:3: error: duplicate 'unsigned' te…
参考にしたところ。 http://www.ifixit.com/Guide/First-Look/iPod-Touch-2nd-Generation/586/1 http://techon.nikkeibp.co.jp/article/NEWS/20081009/159383/ 以下、補足になりそうなところだけメモを残す。 ガラスカバー(タッチパネル) 旧型はディスプレ…
http://atnd.org/events/539とても面白かった。知らなかったことがあったのでさっそく家で試してみた。 素性の分からないファイルの調べ方 大岩さんの発表で rpm -qf で所属パッケージを調べ、rpm -ql で関連ファイルを調べるという方法が紹介されていた。ub…
http://d.hatena.ne.jp/yupo5656/20061215に書かれている Hello, world! で遊んでみました。そのままだと、ubuntu amd64 だとデフォルトでデータ実行不可になっていてセグってしまう。http://en.wikipedia.org/wiki/NX_bit.plt セクションに配置すると良いら…
ホントどうでもいいことだ・・・w ウェブからアップロードした場合 タイトルを半角英数で "hoge foo bar" とした場合 http://www.slideshare.net/username/hoge-foo-bar-presentation スペースはハイフンに置き換わる 最近は末尾に -presentation が必ず付くよ…
画像処理の話をしていたら、以下のような記事を教えてもらった。 http://pingmag.jp/J/2006/03/07/10-tiny-tokyo-photos/実際にはチルトシフトレンズというものを使って撮影するそうだが、擬似的に Photoshop でも加工できるとあるので試してみた。Google 画…
以下のグローバル変数を関数で初期化するコードは C++ でコンパイルできて動作するんですね・・・ #include <stdio.h> int initializer() { return 12345; } int g_int = initializer(); int main(int argc, char** argv) { printf("g_int = %d\n", g_int); return 0; } </stdio.h>…
has-a はポインタを使うことが多くて曖昧な知識だったが、参照型のクラスメンバ変数は初期化子で初期化すれば利用できる。 class test { public: test(int& val) : m_val(val) {} // OK test(int val) : m_val(val) {} // OK // test() {} // test.cpp:6: er…
glibc-2.7 のソースコードで確認した。以下は jmp_buf から実際のアドレスを抜き出すテストプログラム。 #include <stdio.h> #include <setjmp.h> #define PTR_DEMANGLE(var) asm("rorq $17, %0;" \ "xorq %%fs:0x30, %0;" : "=r"(var) : "0"(var)) int main(int argc, char** a</setjmp.h></stdio.h>…
マイクロスレッドの実装で、%ESP と %EIP の切り替えに setjmp()/longjmp() を利用しようとしたらハマってしまった。調べてみるとセキュアコーディングの関係で jmp_buf の %EIP, %ESP のポインタがエンコーディングされていた。 http://d.hatena.ne.jp/yupo…
普段ちゃんと const を付けていないので自分でもビックリなところでつまずいてしまった。 #include <stdint.h> class test { public: uint8_t* getBuf() { return m_buf; } private: uint8_t m_buf[256]; }; というソースコードで、getBuf() は副作用がないから const </stdint.h>…
gcc で -Wformat-nonliteral の確認をしていたときに、文字列リテラルについてちょっと自分が誤解していたことに気づいた。文字列リテラルの代入は(善し悪しはともかく)次のようなバリエーションがある。 char string0[] = "test"; const char string1[] =…
前職の同僚の上司が入院したときに女医さんから「答えが分からない」と相談されたという出所不明の問題です。 12 時間制の時計 1 時間毎に時報が鳴る 時報は時刻の数だけ 1 秒間隔で鳴る 3 時ならピピピと 3 秒鳴る 時刻は好きに合わせて良い こんな時計があ…
effective uid = root の完全放棄は setuid(newUid) とすれば real uid = effective uid = saved uid = newUid となるので二度と effective uid = root にすることはできなくなる。ところで root ではないが重要なアカウント(仮に 501)があったとして、その…
http://journal.mycom.co.jp/articles/2004/04/02/code/古い記事だけど、 この「1」が32bitのint型にキャストされたため「1 というのが気になった。てっきりシフトしすぎて0になるのかと思った。C99 規格を確認してみると整数拡張後の型の幅以上のシフトの結…
C99 の整数拡張と算術型変換の「見える化」ってできないか〜と思い、何か境界条件などで整数拡張や算術型変換の有無が結果に表れてくる例がないか?と考えたけど思いつかなかった。gcc のコンパイル結果(アセンブリコード)を見ても IA-32 だと、 負の数は2…