यहाँ एक "हैलो दुनिया" कार्यक्रम WinAPI के WriteFile का उपयोग करता है है (माइक्रोसॉफ्ट विज़ुअल सी ++ 2008 एक्सप्रेस में संकलित):मानक आउटपुट पर लिखते समय WriteFile क्रैश क्यों करता है?
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[] = L"Hello world";
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if(out && out!=INVALID_HANDLE_VALUE)
{
WriteFile(out, str, sizeof(str), NULL, NULL);
CloseHandle(out);
}
return 0;
}
तो एक कंसोल विंडो में मार डाला है, यह खुशी से दुनिया को बधाई दी। आप अपने मानक आउटपुट पुनर्निर्देशित करने के लिए, तथापि, WriteFile में
hello.exe > output.txt
कार्यक्रम दुर्घटनाओं (नल पॉइंटर एक्सेप्शन) में के रूप में प्रयास करें। फिर भी, output.txt मौजूद है और इसमें पूर्ण आउटपुट सही है।
दुर्घटना पर कॉल स्टैक:
[email protected]() + 0x75 bytes
[email protected]() + 0x4e bytes
srgprc2.exe!wmain(int argc=1, wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
संदेश: "क्रिया के अपवाद 0x75ce85ea पर (KernelBase.dll) srgprc2.exe में: 0xc0000005:। पहुँच उल्लंघन लेखन स्थान 0x00000000"
यहां क्या हो रहा है? धन्यवाद!
CloseHandle() कॉल को हटाएं। –
... जैसा कि स्पष्ट होना चाहिए, क्योंकि आप 'प्राप्त करें ...' फ़ंक्शन का उपयोग कर रहे हैं, न कि 'ओपन ...' फ़ंक्शन। –
क्लोजहैंडल को भी नहीं कहा जाता है, क्रैश लिखितफाइल में होता है और कार्यक्रम समाप्त हो जाता है। – user38329