...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

trueでありfalseである

見た感じこんな構造になってると思うんだけど・・・.

struct A {
  int v;
};
A *p;
void load() {
  //pにNULLかNULLでない値をセット
}
int is_valid() {
  return (p != NULL);
}
int get_value() {
  return p->v;
}
class Simurator {
  [DllImport("comet2.dll", /*省略*/)]
    public static extern bool Load();
  [DllImport("comet2.dll", /*省略*/)]
    public static extern bool IsValid();
  [DllImport("comet2.dll", /*省略*/)]
    public static extern int GetValue();
}
class Client {
  void Test() {
    Simurator.Load();
    if (Simurator.IsValid()) {
      int v = Simurator.GetValue(); // Simurator.IsValid() == false のときがある!?
    }
  }
}

えええーなんでぇー?�堯福陰◆院�

追記

int is_valid() {
  printf("p=%d\n", p);//これのありなし
  return (p != NULL);
}
int get_value() {
  printf("p=%d\n", p);//なぜかp==0のときがある
  return p->v;
}

printf()のありなしでアクセス違反かどうかが変わるwww
やめてくれ・・・orz
pは他の翻訳単位のグローバル変数で,上のソースのヘッダでextern A* p;としているのだが・・・いったい何の問題に引っかかっているんだ.