見た感じこんな構造になってると思うんだけど・・・.
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;としているのだが・・・いったい何の問題に引っかかっているんだ.