gpt4 book ai didi

c# - 使用 BSTR 对结构执行 memset

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:44 26 4
gpt4 key购买 nike

我目前有一个堆损坏导致我的应用程序崩溃。我的应用程序是 COM 服务器 (C++) 编码到 C# 客户端应用程序。它看起来像是作为 COM 清理的一部分从 C# 端调用的 SysFreeString。我似乎无法查明原因,但是否有可能在 C++ 端对具有 BSTR 的结构执行 memset 0 会导致问题?

以下是否有效?

memset(pResult, 0, sizeof(RESULT)) where pResult is of type RESULT

typedef struct _Result
{
DWORD dwResult;
BSTR strData;
} RESULT;

来自 WinDbg 的 STACK_TEXT:

00000000`77b4b518 00000000`77a7bc35 ntdll! ?? ::FNODOBFM::`string'+0xea1900000000`77b4b520 000007fe`ffc41377 oleaut32!SysFreeString+0x5300000000`77b4b528 000007fe`ffc46b2e oleaut32!BSTR_UserFree+0x1e00000000`77b4b530 000007fe`fe354a1c rpcrt4!NdrUserMarshalFree+0x4c00000000`77b4b538 000007fe`fe3566eb rpcrt4!NdrpFreeParams+0x20700000000`77b4b540 000007fe`fe365362 rpcrt4!NdrStubCall2+0xedc00000000`77b4b548 000007fe`fe84f16e ole32!CStdStubBuffer_Invoke+0x8b00000000`77b4b550 000007fe`fe850ccd ole32!SyncStubInvoke+0x5d00000000`77b4b558 000007fe`fe850c43 ole32!StubInvoke+0xdb00000000`77b4b560 000007fe`fe70a4f0 ole32!CCtxComChnl::ContextInvoke+0x19000000000`77b4b568 000007fe`fe8514d6 ole32!AppInvoke+0xc200000000`77b4b570 000007fe`fe85122b ole32!ComInvokeWithLockAndIPID+0x52b00000000`77b4b578 000007fe`fe84fd6d ole32!ThreadInvoke+0x30d00000000`77b4b580 000007fe`fe363254 rpcrt4!DispatchToStubInCNoAvrf+0x1400000000`77b4b588 000007fe`fe3633b6 rpcrt4!RPC_INTERFACE::DispatchToStubWorker+0x14600000000`77b4b590 000007fe`fe365b8b rpcrt4!RPC_INTERFACE::DispatchToStub+0x9b00000000`77b4b598 000007fe`fe365acb rpcrt4!RPC_INTERFACE::DispatchToStubWithObject+0x5b00000000`77b4b5a0 000007fe`fe365a62 rpcrt4!LRPC_SCALL::DispatchRequest+0x42200000000`77b4b5a8 000007fe`fe36375d rpcrt4!LRPC_SCALL::HandleRequest+0x20d00000000`77b4b5b0 000007fe`fe3809ff rpcrt4!LRPC_ADDRESS::ProcessIO+0x3bf00000000`77b4b5b8 000007fe`fe3805b5 rpcrt4!LrpcIoComplete+0xa500000000`77b4b5c0 00000000`77a2b6bb ntdll!TppAlpcpExecuteCallback+0x26b00000000`77b4b5c8 00000000`77a2ff2f ntdll!TppWorkerThread+0x3f800000000`77b4b5d0 00000000`7790652d kernel32!BaseThreadInitThunk+0xd00000000`77b4b5d8 00000000`77a3c541 ntdll!RtlUserThreadStart+0x1d

最佳答案

is it possible that doing a memset 0 on the C++ side on a structure that has a BSTR in it cause problems?

不,BSTR 是一个指针类型 (typedef OLECHAR *BSTR;) 所以用 memset 清除它的值最多会导致内存泄漏但不是崩溃。

关于c# - 使用 BSTR 对结构执行 memset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com