gpt4 book ai didi

c++ - 内存访问冲突错误c++

转载 作者:行者123 更新时间:2023-11-28 04:47:21 25 4
gpt4 key购买 nike

我正在尝试使用多个隐蔽 channel 交换消息。所以,基本上,首先我需要选择我想用于通信的 channel ,然后选择我想与之聊天的用户的“destination_ip”,然后是

processMessage()

被调用。现在,要从一个 channel 移动到另一个 channel ,我必须关闭现有连接,然后打开一个与我要使用的新 channel 的新连接。我的下面的代码被修改为在关闭连接后继续使用相同的 channel ,并且只包含您需要的东西。

#include <channelmanager.hpp>
#include <thread>
#include <iostream>
#include <boost/test/unit_test.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
#include <stdio.h>
#include <string.h>
#include <fstream>
#include <openssl/hmac.h>

struct CommunicationFixture {
CommunicationFixture() {
channelmanager.setErrorStream(&cout);
channelmanager.setOutputStream(&cout);
destination_ip = "";
channel_id = channelmanager.getChannelIDs()[0];

}
library::ChannelManager channelmanager;
vector<string> last_adapters;
string destination_ip;
string channel_id = "";


int processMessage(string message) {
if (message.compare("exit") == 0) {
channelmanager.closeConnection(destination_ip);
return 1;
}
vector<string> arguments;
boost::split(arguments, message, boost::is_any_of(" "), boost::token_compress_on);
if (arguments[0].compare("argument") == 0) {
if (arguments.size() < 2) {
cout << "Not enough arguments" << endl;
return 0;
}
string argument_list = arguments[1];
for (unsigned int i = 2; i < arguments.size(); i++) {
argument_list += " " + arguments[i];
}
channelmanager.setChannelArguments(destination_ip, argument_list);
cout << "Set channel argument to '" << argument_list << "'." << endl;
return 0;
}
if (message.compare("help") == 0) {
cout << "Help not available in chat mode. Close chat first with 'exit'" << endl;
return 0;
}


channelmanager.openConnection(destination_ip, channel_id);
channelmanager.sendMessage(destination_ip, message);

return 0;

}

int close(string destination){
cout << "closing.." << endl;
channelmanager.closeConnection(destination); //I believe i have the error because of this!
return 0;
}

};


BOOST_FIXTURE_TEST_SUITE(communication, CommunicationFixture)

BOOST_AUTO_TEST_CASE(basic_communication) {

selectAdapterId(0);
cout << "Test" << endl << endl;
printCommands();
cout << "Enter your command:" << endl;
string command;
int code = 0;
while (code != 2) {
std::getline(cin, command);
code = processCommand(command);
if (code == 1) {
// chat
cout << "chat started.." << endl;
int chatCode = 0;


while (chatCode != 1) {
std::getline(cin, message);
close(destination_ip);
chatCode = processMessage(message);
channelmanager.setErrorStream(&cout);
}
cout << "chat ended." << endl;
}
}



}

BOOST_AUTO_TEST_SUITE_END()

请注意,我认为错误是由于

function close()

因为没有它我不会收到任何错误。并且错误不会立即发生,而是在交换一些消息后发生。这是错误:

unknown location(0): fatal error: in "communication/basic_communication": memory access violation at address: 0x00000024: no mapping at fault address communicationTest.cpp(325): last checkpoint: "basic_communication" test entry

最佳答案

当您尝试访问一个未初始化的变量时,会发生内存访问冲突,在本例中为 channelmanager

我只能看到您在 processMessage() 方法中初始化了 channelmanager 并且在初始化 channelmanager 之前关闭了连接发生在:

close(destination_ip);
chatCode = processMessage(message);

要么更改初始化,要么不在 processMessage() 方法之前关闭它。

关于c++ - 内存访问冲突错误c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007767/

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