我具有被這樣定義的函數:將值分配給導致崩潰的非靜態函數指針 - 爲什麼?
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