我正在开发一个项目,我们将旧的C代码重构为新的C++,我们正在使用异常进行错误处理.
我们正在为不同的模块创建不同的异常类型.
我认为这不值得,但我没有任何有效的论据来证明我的观点.因此,如果我们编写标准库,您将看到vector_exception,list_exception等.
在考虑这件事的时候,我偶然发现了这个问题:
什么时候应该创建自己的异常类型,何时应该坚持已在std库中创建的异常?
另外,如果我们采用上述方法,那么在不久的将来我们可能面临的问题是什么呢?
我只是调试一个大项目,并得到这个错误
*** glibc detected *** p_appmanager/obj/appmanager: corrupted double-linked list: 0x08325e18 **
Run Code Online (Sandbox Code Playgroud)
我试图用valgrind调试代码,但我对这个工具并不熟悉.所以如果你能从他们那里找到任何东西,我会把这些日志倾倒在这里请告诉我.
任何人都可以解释以下错误信息可能意味着什么?
==2181== Invalid read of size 1
==2181== at 0x402C658: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x40FCC2D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x4359234 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: …Run Code Online (Sandbox Code Playgroud) 在阅读STL时,我意识到没有std::erase提供.我不确定为什么它不存在.一个有效的用例如下
std::vector<int> odd { 1, 3, 5, 3, 9, 11, 5, 17 };
std::sort(odd.begin(), odd.end());
std::erase(std::unique(odd.begin(), odd.end()), odd.end());
Run Code Online (Sandbox Code Playgroud)
它嵌入在每个容器中.如果性能是原因,那么如果对象是连续的,则可以一次删除它们.但我想这可以通过帮助模板专业化来实现.
我想访问由字符串类维护的数组的起始地址.
string str="hey";
char* pointer=(char*)str.c_str();
Run Code Online (Sandbox Code Playgroud)
指针是否指向数组的地址(由字符串类维护)?或字符串类将从动态内存创建一个新数组并将现有字符串复制到其中并返回它的地址?
如果这不是正确的方法,那么如何访问由字符串类维护的数组的起始地址?
我在编译代码时遇到这些错误.我在user/include下有所有标题
g++ -Ip_appmanager/inc -Icore/inc p_appmanager/src/appmanager_process.cpp -o p_appmanager/obj/appmanager -lpthread -lparser
p_appmanager/src/appmanager_process.cpp: In function ‘int main(int, char**)’:
p_appmanager/src/appmanager_process.cpp:33:21: error: ‘getpid’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:101:19: error: ‘fork’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:105:70: error: ‘execl’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:109:19: error: ‘getppid’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:124:19: error: ‘fork’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:128:61: error: ‘execl’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:132:19: error: ‘getppid’ was not declared in this scope
p_appmanager/src/appmanager_process.cpp:147:19: error: …Run Code Online (Sandbox Code Playgroud) 我试着写一个简单的C程序.在这里我定义了一个宏.
#define NAME(x) #x ## _bingo
Run Code Online (Sandbox Code Playgroud)
现在首先要解决哪一个(#和##)?
我被卡住了:).我试图谷歌关于这样的宏优先权.但找不到任何相关的东西.
我正在编写自定义控制台程序.我想让它看起来像一个真实的.所以我想用keypress事件绑定一些动作.
例如,当按下向上箭头时,应向用户显示先前执行的命令.我知道SDL.但我认为它不是标准库,是吗?
如果还有其他选择,包括在标准CPP库中,请告诉我.
谢谢.
我正在研究自己的Windows设备驱动程序,我发现很难区分PDO和FDO.让我告诉你,如果我错了,我头脑中的流量会纠正我!
系统启动时,它会加载将创建FDO的根总线驱动程序.现在它将枚举其子设备,并且我想在将找到一个新的子项并且该方法将通知PNP管理器时将调用总线驱动程序的一些热插拔方法.PNP管理器将调用根总线驱动程序的AddDevice()例程,并将为新总线创建PDO,如PCI等等.请详细解释整个流程,这只是我的想象.然后记录系统将加载PCI总线的功能驱动程序,这将创建FDO ?? 这个FDO是什么?为什么我需要那个?根据我的说法PCI总线驱动程序也应该遵循与根总线相同的操作,枚举其子节点并为它们创建PDO,或者通过这个FDO它们仅意味着PDO?我很困惑:( !!
我对VIRTUAL关键字感到困惑.我试图找到编译器如何在内存中实现它.好的,让我用例子解释一下.我使用Microsoft Visual Studio 2010作为虚拟的实现取决于编译器.
这是第一个代码
#include<iostream>
class one
{
int _a;
public:
virtual ~one(){}
};
class two:public one
{
int _a;
public:
virtual ~two(){}
};
int main()
{
using namespace std;
cout<<"sizeof two="<<sizeof(two)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
o/p是12个字节,因为_ vptr _two,一个:: _ a和两个:: _ a
这是另一个示例代码
#include<iostream>
class one
{
int _a;
public:
virtual ~one(){}
};
class two
{
int _a;
public:
virtual ~two(){}
};
class three:virtual public one,virtual public two
{
};
int main()
{
using namespace std;
cout<<"sizeof three="<<sizeof(three)<<endl;
return …Run Code Online (Sandbox Code Playgroud) 如果我将分区的日志保留期设置为2小时而不是2小时后,将仅清除消耗的消息或清除所有消息(无论是否消耗)?
今天我已经读过字符串在java中以null字符终止.但是为什么它是必要的,因为字符串的长度已经由sting类的长度变量维护了?所以对我来说这有点奇怪.请有人向我澄清一下.
谢谢
我正在用java编写一个客户端程序.服务器是用C++编写的.当我从客户端向服务器发送消息时,它很好.但在接收我的客户端线程时卡在此调用中
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Run Code Online (Sandbox Code Playgroud)
当我断开连接时,所有收到的数据都会打印出来.我从这个场景中得到的是getInputStream()没有获得终止字符(我不知道它应该是什么),就像它的空字符一样.所以请告诉我,我应该在服务器端的消息末尾添加什么来恢复此问题.