在下面的代码中,我遍历一个map并测试是否需要擦除一个元素.擦除元素并继续迭代是否安全,或者我是否需要在另一个容器中收集密钥并执行第二个循环来调用erase()?
map<string, SerialdMsg::SerialFunction_t>::iterator pm_it;
for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++)
{
if (pm_it->second == delete_this_id) {
port_map.erase(pm_it->first);
}
}
Run Code Online (Sandbox Code Playgroud)
我正要为我们这里的应用程序添加一个额外的信号处理程序,我注意到作者已经习惯sigaction()了设置其他信号处理程序.我打算用signal().按照惯例我应该使用,sigaction()但如果我是从头开始写,我应该选择哪个?
我注意到在我的SGI STL参考文献中,有一个关于角色特征的页面,但我看不出这些是如何使用的?他们是否替换了string.h函数?它们似乎没有被使用std::string,例如,length()方法on std::string不使用Character Traits length()方法.为什么角色特征存在并且它们是否曾在实践中使用过?
鉴于Linux内核oops,你如何诊断问题?在输出中,我可以看到堆栈跟踪,似乎给出了一些线索.有没有什么工具可以帮助找到问题?您要遵循哪些基本程序来追踪它?
Unable to handle kernel paging request for data at address 0x33343a31
Faulting instruction address: 0xc50659ec
Oops: Kernel access of bad area, sig: 11 [#1]
tpsslr3
Modules linked in: datalog(P) manet(P) vnet wlan_wep wlan_scan_sta ath_rate_sample ath_pci wlan ath_hal(P)
NIP: c50659ec LR: c5065f04 CTR: c00192e8
REGS: c2aff920 TRAP: 0300 Tainted: P (2.6.25.16-dirty)
MSR: 00009032 CR: 22082444 XER: 20000000
DAR: 33343a31, DSISR: 20000000
TASK = c2e6e3f0[1486] 'datalogd' THREAD: c2afe000
GPR00: c5065f04 c2aff9d0 c2e6e3f0 00000000 00000001 00000001 00000000 0000b3f9
GPR08: 3a33340a c5069624 c5068d14 …Run Code Online (Sandbox Code Playgroud) 请考虑以下具有指针成员的类int *a.constMod即使修改指针数据,编译器也允许使用const方法.为什么编译器不在const方法的上下文中使指针数据为const?如果a只是一个int,我们将不允许在const方法中修改它.
class ConstTest
{
public:
ConstTest(int *p): a(p) {}
void constMod() const {
++(*a);
}
int *a;
};
Run Code Online (Sandbox Code Playgroud)
我在linux上使用g ++.
我有一个带有可选虚函数的基类
class Base {
virtual void OnlyImplementThisSometimes(int x) {}
};
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我得到一个关于未使用的param x的警告.还有其他方法我应该实现虚拟功能吗?我重写了这样的话:
class Base {
virtual void OnlyImplementThisSometimes(int x)
{
x = 0;
}
};
Run Code Online (Sandbox Code Playgroud)
我还有一个问题,如果我不小心,我制作的子类可以实现错误的功能,然后由于重载我没有注意到:例如
class Derived : public Base {
void OnlyImplementThisSometimes(int x, int y) { // some code }
};
Derived d;
Base *b = dynamic_cast<Base *>(&d);
b->OnlyImplementThisSometimes(x); // calls the method in the base class
Run Code Online (Sandbox Code Playgroud)
调用基类方法是因为我使用"int y"参数实现了派生函数,但没有对此进行警告.这些只是C++中常见的陷阱还是我误解了虚函数?
我有一个内存泄漏的应用程序的核心转储.我已经使用strings命令和xdd来检查文件,并且我已经了解了程序的哪个部分可能导致泄漏的一些想法.我可以使用应用程序在gdb中运行核心文件,但是我不能用它做很多测试,因为它是一个嵌入式应用程序,有很多复杂的基于时间的I/O,我无法在办公室模拟.
我还听说运行各种内存泄漏检测实用程序会降低我们无法负担的应用程序,因为它已经在接近CPU容量运行.
所以我现在所拥有的只是这个核心文件.我正在寻找的示例:是否有一个指针表我可以检查以找到已分配的内存,然后我可以使用它来尝试找到本应该已被释放但尚未被释放的内容?
为什么你可以在std :: basic_string中插入一个'\ 0'字符,而.length()方法不受影响,但如果你调用,char_traits<char>::length(str.c_str())你可以获得字符串的长度直到第一个'\ 0'字符?
例如
string str("abcdefgh");
cout << str.length(); // 8
str[4] = '\0';
cout << str.length(); // 8
cout << char_traits<char>::length(str.c_str()); // 4
Run Code Online (Sandbox Code Playgroud) 我正在开发一个嵌入式系统,该系统目前使用串行端口1上的控制台输出启动linux(使用来自引导加载程序的控制台启动参数).但是,最终我们将使用此串行端口.内核控制台输出的最佳解决方案是什么?的/ dev/null的?它可以以某种方式放在pty上,以便我们可以访问它吗?
我正在编写一个模拟,我们需要一些盒子,当它们在一组传送带上移动时,可以相当准确地建模.目前,我们检测箱子是否与静态输送机表面碰撞,并根据输送机速度应该对每个箱子施加冲动.有没有办法让实际的输送机表面移动并使其环绕或在出料端溶解并从进料端生长?只是使用子弹类和方法的名称才能真正起作用.