0

我已经编写了一个函数来在给定目录中创建一个文本文件并将当前的 processID 写入它

当单击对话框上的 OK 按钮时调用该函数,它似乎可以执行我想要的操作,但是当我调用它时,应用程序会在对话框关闭时崩溃。(如果我删除我的功能,它会毫无问题地关闭)。

这就是我所拥有的:

void LockFolder(UnicodeString folderLocation)
{
  DWORD processID = GetCurrentProcessId();
  _TCHAR currentProcessID[sizeof(DWORD)];
  _TCHAR* lockID;
  _TCHAR* lock = folderLocation.c_str();
  fstream lockFile;

  _stprintf(currentProcessID,_T("%i"),processID);
  _tcscat(lock,_T("Lock.txt"));

  lockFile.open(lock,ios::out);
  lockFile<<currentProcessID;
  lockFile.close();
}

做了一些更改,但问题仍然存在,版本 2:

void LockFolder(UnicodeString folderLocation)
{
  DWORD processID = GetCurrentProcessId();
  _TCHAR* lock = folderLocation.c_str();
  _tcscat(lock,_T("Lock.txt"));

  fstream lockFile;
  lockFile.open(lock,ios::out);
  lockFile<<processID<<"\0";
  lockFile.close();
}
4

1 回答 1

0

在这些行中,您破坏了堆:

_TCHAR* lock = folderLocation.c_str(); 
_tcscat(lock,_T("Lock.txt")); 

相反,请执行以下操作:

std::stringstream str; // or wstringstream
str << folderLocation << "Lock.txt"; // or L"Lock.txt"
std::string lock = str.str(); // or wstring
于 2012-07-10T17:32:51.950 回答