我具有被这样定义的函数:将值分配给导致崩溃的非静态函数指针 - 为什么?
typedef void (*logprintf_t)(const char* format, ...);
logprintf_t logprintf
void my_function() {
logprintf = cast(logprintf_t)0x12345;
}
,它会导致应用程序退出。但是,如果我做了logprintf是静态的(我在什么地方见过这种把戏),即:
void my_function() {
static logprint_t logprintf = cast(logprintf_t)0x12345;
}
它不会崩溃。
是不是这样的语言规则的事情或一种错误的?为什么dmd不警告这件事?
1)是啊,我刚才忘了当在写一个问题,固定2)我试图同时使用的typedef和别名,它给我3)同2 – szx 2010-09-10 14:38:22
相同的结果,那么我就不能重现这一切。你能提供更多关于你崩溃时得到的错误信息的细节吗? – dsimcha 2010-09-10 14:43:41
好吧,现在非常奇怪 - 我无法在其他应用程序中重现它,但在我的应用程序中却是这样!我尝试评论与赋值部分行,它的工作,所以我认为这个问题在那里...顺便说一句我正在制作一个DLL(一个插件)是由外部(闭源)应用程序加载,它不'当碰撞时不会产生任何消息。它在C++中正好用这种方式工作,但现在我正在转向D并且有这个愚蠢的问题。无论如何感谢您的回复。 – szx 2010-09-10 15:07:37