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

时间:2017-03-15 16:54:53

标签: debugging plugins crash c++-cli teamspeak

...的sooo 我写了一个插件,整个插件工作正常。 唯一的问题: 我的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论坛上问了很长时间,得到了很多答案,没有人能告诉我它为什么会崩溃,而且我也无法自己解决这个问题。

它实际上会打印通道名称[*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()

1 个答案:

答案 0 :(得分:1)

List<String^>^ channel;
...
channel->Add(a);

channel为空。您需要使用某些内容对其进行初始化,可能是gcnew List<String^>()。我不确定为什么你得到一个拒绝访问的消息而不是NullReferenceException。

其他问题

  • 确保正确处理所有非托管字符串。例如,getChannelVariableAsString是否需要调用以显式释放缓冲区?请务必致电FreeHGlobal以释放StringToHGlobalAnsi为您分配的内存。