FIX: 應用程式遺漏一個控點當您在 Visual C++.NET 2003年中呼叫 CRT _popen 函式

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:892086
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
當您使用 Microsoft Visual C++.NET 2003年中,您應用程式遺漏 (Memory Leak) [C 執行階段 (CRT) _popen 函式的控制代碼每次呼叫函式。
發生的原因
若要協助改善效能,CRT _popen 函式實作 Visual C++.NET 2003年中的已變更。CRT _popen 函式現在使用 WinAPI CreateProcess 函式,而不是 CRT _spawnl 函式。控制代碼遺漏是由 Visual C++.NET 2003年中的錯誤所造成。這個 Bug 會使 hThread 控制代碼欄位 PROCESS_INFORMATION 結構停留在開啟狀態。
解決方案
支援的 Hotfix 現在可以從 Microsoft,但它只用來修正本文所述的問題。僅適用於發生此特定問題的系統。此 Hotfix 可能會接受其他測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個的 Visual Studio.NET 2003 Service Pack 包含此 Hotfix。

如果要立即解決這個問題,洽詢 Microsoft 技術支援部以取得該 Hotfix。如需 Microsoft 產品支援服務電話號碼及支援成本的相關資訊的完整清單,請造訪下列 Microsoft 網站]:附註 在特殊情況下通常會因支援電話所產生的費用可能就不收取如果 Microsoft 支援人員認為某特定更新程式可以解決您的問題。平常的支援成本將會套用到其他支援問題是所做不限定特定有問題的更新程式。

必要條件

沒有先決條件都是必要的。

重新啟動需求

您沒有套用此 Hotfix 之後,重新啟動您的電腦。

Hotfix 取代資訊

此 Hotfix 不會取代任何其他的 Hotfix。

檔案資訊

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time   Version            Size    File name   --------------------------------------------------------------   03-Feb-2005  02:57                     13,858  A_map.c   03-Feb-2005  03:27                    363,744  Eh.lib   03-Feb-2005  02:57                     10,456  Io.h   06-Feb-2004  19:29                      4,246  Ios.cpp   03-Feb-2005  03:30                  2,707,628  Libc.lib   03-Feb-2005  03:34                  3,023,492  Libcd.lib   03-Feb-2005  03:31                  2,937,528  Libcmt.lib   03-Feb-2005  03:36                  3,304,810  Libcmtd.lib   03-Feb-2005  03:30                  3,601,372  Libcp.lib   03-Feb-2005  03:35                  4,433,774  Libcpd.lib   03-Feb-2005  03:32                  3,651,664  Libcpmt.lib   03-Feb-2005  03:36                  4,449,888  Libcpmtd.lib   03-Feb-2005  04:11  7.10.4353.0       499,712  Msvcp71.dll         03-Feb-2005  03:37  7.10.4353.0       765,952  Msvcp71d.dll        03-Feb-2005  04:11  7.10.4353.0       348,160  Msvcr71.dll         03-Feb-2005  03:37  7.10.4353.0       544,768  Msvcr71d.dll        03-Feb-2005  02:58                     17,400  Popen.c   03-Feb-2005  02:57                      9,948  Read.c   03-Feb-2005  16:00                    202,240  Vc_user_crt71_rtl_x86_---.msm   03-Feb-2005  16:00                    151,040  Vc_user_stl71_rtl_x86_---.msm
狀況說明
Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。
其他相關資訊
若要確認您的應用程式的控制代碼遺漏監視 Handles 計數 Windows 工作管理員] 中。

例如當您建置,然後再執行下列的 Visual C++ Win32 主控台專案程式碼,Handles 計數會繼續增加 Windows 工作管理員] 中:
// Testpopen.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdio.h>#include <conio.h>int _tmain(int argc, _TCHAR* argv[]){	FILE * pPipe = NULL;	char	buffer[128] = {0};	while (!kbhit())	{		pPipe = _popen("dir *.* /s", "r");		if (pPipe != NULL)		{			printf(_T("Pipe opened at 0x%08x\n"), (unsigned long)pPipe);			while (!feof(pPipe))			{				if (fgets(buffer, 128, pPipe))					printf(buffer);			}			printf("Pipe closed (%d)\n", _pclose(pPipe));					}	}		return 0;}
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明
Visual Studio 更新 QFE 3432

警告:本文為自動翻譯

內容

文章識別碼:892086 - 最後檢閱時間:12/09/2015 02:02:06 - 修訂: 2.2

Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual Studio .NET 2003 專業版, Microsoft Visual Studio .NET 2003 Enterprise Developer, Microsoft Visual Studio .NET 2003 Enterprise Architect, Microsoft Visual Studio .NET 2003 Academic Edition

  • kbnosurvey kbarchive kbmt kbqfe kbbug kbfix kbprb kbhotfixserver KB892086 KbMtzh
意見反應