gpt4 book ai didi

debugging - C++ CLI/TS3 客户端在插件上崩溃

转载 作者:行者123 更新时间:2023-12-03 16:46:58 25 4
gpt4 key购买 nike

苏...
我写了一个插件,整个插件工作正常。
唯一的问题:
我的 TS3 客户端崩溃。
给出一个上下文:
(警告:该代码粘贴不当。在 GitHub 上,它在第 270 和 285 行崩溃)

// Helper Function

String^ getChannelName(uint64 serverConnectionHandlerID, uint64 channelID) {
char* tmp;
if (ts3Functions.getChannelVariableAsString(serverConnectionHandlerID, channelID, CHANNEL_NAME, &tmp) == ERROR_ok) {
return marshal_as<String^>(tmp);
}
else
{
return "ERROR_GETTING_CHANNELNAME";
}
}
void assemble_a() {
List<String^>^ clients;
List<String^>^ channel;

// Some middlepart here, but I made sure it works as it should

// And the actual part where it is crashing
if (resChL == ERROR_ok) {
for (int i = 0; channelListPtr[i]; ++i) {
String^ a = getChannelName(schid, channelListPtr[i]);
const char* b = (const char*)(Marshal::StringToHGlobalAnsi(a)).ToPointer();
ts3Functions.logMessage(b, LogLevel_DEBUG, "DEBUG_VC", schid);
if (String::IsNullOrEmpty(a) == false) {
channel->Add(a); // It crashes RIGHT at this point
}
}
}
}
所以我在TS3论坛上问了很久,得到了很多答案,没有人能告诉我为什么它实际上会崩溃,我自己也没有设法弄清楚。
它确实打印了 channel 名称 [*spacer0]t但是一旦它应该将它附加到字符串列表,它就会崩溃。
它抛出消息 The thread has tried to write or read from a virtual address that it does not have the accesspermissions for.我真的不知道该怎么办,现在尝试修复它超过 2 周。
完整上下文: GitHub Sourcecode
抱歉,如果这个问题在这里可能有点离题(是吗?我不知道......)但我真的不知道该怎么处理这个问题了......
编辑:
来自 try/catch 的错误消息是: System.NullReferebceException: The Objectreference was not set to the Objectinstance, occured in tsapi.assembleGrammar()

最佳答案

List<String^>^ channel;
...
channel->Add(a);
channel一片空白。你需要用一些东西来初始化它,可能是 gcnew List<String^>() .我不确定您为什么收到拒绝访问消息而不是 NullReferenceException。

其他问题
  • 确保正确处理所有非托管字符串。例如,getChannelVariableAsString需要调用显式释放缓冲区?请务必调用FreeHGlobal释放 StringToHGlobalAnsi 的内存分配给你。
  • 关于debugging - C++ CLI/TS3 客户端在插件上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816096/

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