我有一大堆代码用于获取CLR DLL中映射驱动器的UNC路径,但是当我在最后释放内存时,char数组会导致无效的堆指针断言失败,而且我假设它与InteropServices分配它有关,但我想确保它不会变成内存泄漏,因为这个函数被反复调用.
码:
DWORD MAX_DEVICE_LENGTH = 1000;
TCHAR* szDeviceName = new TCHAR[MAX_DEVICE_LENGTH];
memset(szDeviceName, '\0', MAX_DEVICE_LENGTH);
DWORD dwResult;
char* charpath = (char*) (void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(path->Substring(0,2));
wchar_t* tpath = new wchar_t[MAX_DEVICE_LENGTH];
memset(tpath, '\0', MAX_DEVICE_LENGTH);
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, charpath, -1, NULL, 0);
MultiByteToWideChar (CP_ACP, 0, charpath, -1, tpath, dwNum );
dwResult = WNetGetConnection(
tpath,
szDeviceName, &MAX_DEVICE_LENGTH);
System::String ^ str = gcnew System::String(szDeviceName);
str += path->Substring(2, path->Length-2);
delete(szDeviceName);
free(charpath); //This is where it assert-fails
delete(tpath);
return str;
Run Code Online (Sandbox Code Playgroud)
这可能是我不理解的关于内存去分配的基本内容,但无论哪种方式值得搞清楚.如果它有帮助,如果我跳过该行tpath删除罚款,但如果charpath断言失败,那么tpath也将失败.
作为前言,所有这些都发生在本地Intranet上,在任何时候都不需要连接到Internet.
我有一个运行查询的数据库,之后用户按下"下载电子表格"按钮,创建/发送电子表格.电子表格的创建工作正常,但经过多次尝试后我无法下载该文件.这是我尝试过的:
在大多数情况下,结果是创建了excel文件,但没有发生重定向/下载.在Response.Redirect()的情况下,如果它是一个网站,它工作得很好,但如果它是一个重定向到file:///,那么它会抛出一个线程异常,但没有更多细节.
我怀疑它与ASP.NET文档的生命周期有关,但我担心我对ASP.NET的经验不足以确定无疑.