我无法创建服务器列表
I can not create a list of servers
我正在尝试使用qttcpserver创建一个服务器。我的代码就是为这个例子编写的。唯一的区别是我还使用了线程池。我有一张表格,上面有两个按钮。第一个按钮创建类服务器的对象,第二个按钮删除。很明显,按钮负责打开和关闭服务器。我想在不同的端口上运行服务器。因此,我需要在服务器上创建多个类对象,并将其作为参数传递给所需端口的构造函数
为了让你更好地理解我的按钮的代码。
class FormServer {
...
private:
MyServer * server;
public:
void start() {
server = new MyServer();
}
void stop() {
delete server;
}
}
这是我在一个端口上运行服务器时的一个示例。
class FormServer {
...
private:
QList<unsigned> ports;
QVector<MyServer *> server;
public:
void start() {
for(auto i = ports.begin(); i != ports.end(); i++) {
server.push_back(new MyServer(*i)); //port passed as a parameter
}
}
void stop() {
for(auto i = server.begin(); i != server.end(); i++) {
delete *i;
}
}
}
在第一个例子中,一切都很好。第二个问题很大。下面是一个示例问题。
start(); //ok
stop(); //ok
start(); //ok
stop(); //error
正在监视调试并查看行删除*i中是否出现错误(server.exe中0x01033862处未处理的异常:0xC0000005:读取地址0x0000000C时发生访问冲突。)
那么,为什么只有当函数被称为第二个停止,并且一开始一切都很好时,才会发生这种情况呢?
请帮我解决这个问题。
抱歉,这不是一个完整的示例代码,因为它非常大,解析起来非常困难。也为我的英语感到抱歉。
这里有两个问题,其中一个很微妙,但仍然是:
-
您正在为元素自己编写删除算法,而不是使用
qDeleteAll
。最好不要重新发明轮子。 -
您不是要从容器中删除元素,而是要删除它们。
因此,如果我是你,我会写这样的东西:
#include <QtAlgorithms>
...
void stop() {
qDeleteAll(server);
server.clear();
}
有关详细信息,请查看QtAlgorithms文档。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 在客户端和远程服务器中比较文件列表的有效方法是什么?
- 如何将默认目录中的文件列表从服务器发送到客户端
- C++,客户端如何逐个向<int>服务器发送列表值?
- Apache Thrift:在列表前使用"optional"时,C++服务器似乎没有正确返回它
- 如何在Windows平台中获取远程Windows服务器的共享文件夹的文件列表
- 如何获得ftp服务器中所有文件和文件夹的列表(c++)
- 我无法创建服务器列表