小编Mar*_*cin的帖子

在vim中组合寄存器

是否可以在vim中组合寄存器?例如,如果我有寄存器"a",b,"c,我可以轻松创建寄存器"d,这是三者的串联吗?也就是说,不将它们全部粘贴然后选择整个事物.

vim concatenation vim-registers

9
推荐指数
1
解决办法
734
查看次数

std :: map operator []中的违规读取位置

我在运行传给我的一些旧代码时遇到了一个问题.它可以在99%的时间内工作,但偶尔会发现它会抛出"违规读取位置"异常.我有可变数量的线程可能在整个过程的生命周期中执行此代码.低出现频率可能表示竞争条件,但我不知道为什么在这种情况下会导致异常.这是有问题的代码:

MyClass::Dostuff()
{
    static map<char, int> mappedChars;
    if (mappedChars.empty())
    {
       for (char c = '0'; c <= '9'; ++c)
       {
          mappedChars[c] = c - '0';
       }
    }
    // More code here, but mappedChars in not changed.
}
Run Code Online (Sandbox Code Playgroud)

在第一次调用operator []时,在map的operator []实现中抛出异常(使用STL的VS2005实现.)


mapped_type& operator[](const key_type& _Keyval)
{
    iterator _Where = this->lower_bound(_Keyval); //exception thrown on the first line
    // More code here
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试在operator []中冻结线程并尝试让它们同时运行它,但是我无法使用该方法重现异常.

你能想出为什么会抛出这种情况,而且只有部分时间?

(是的,我知道STL不是线程安全的,我需要在这里进行更改.我很好奇为什么我看到上面描述的行为.)

根据要求,这里有一些关于异常的更多细节:
app15-51-02-0944_2008-10-23.mdmp中0x00639a1c(app.exe)的未处理异常:0xC0000005:访问冲突读取位置0x00000004.

感谢大家提出多线程问题的解决方案,但这不是这个问题要解决的问题.是的,我理解所呈现的代码没有得到正确的保护,并且在它试图完成的内容方面有些过分.我已经有了实现它的修复程序.我只是想更好地理解为什么要抛出这个异常.

c++ multithreading stl exception

7
推荐指数
1
解决办法
5137
查看次数

如何从字符串的末尾提取数字

给出如下字符串:

   sdfsd34 
    sdfdsf1
Run Code Online (Sandbox Code Playgroud)

我想提取:34,1 使用c ++(STL但没有提升),c.

谢谢

c c++ stl

7
推荐指数
1
解决办法
8360
查看次数

C++ 编译器会优化掉未使用的返回值吗?

如果我有一个返回对象的函数,但调用者从不使用这个返回值,编译器会优化掉副本吗?(可能总是/有时/从不回答。)

基本示例:

ReturnValue MyClass::FunctionThatAltersMembersAndNeverFails()
{
    //Do stuff to members of MyClass that never fails
    return successfulResultObject;
}

void MyClass::DoWork()
{
    // Do some stuff
    FunctionThatAltersMembersAndNeverFails();
    // Do more stuff
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ReturnValue对象会被复制吗?它甚至被构建了吗?(我知道这可能取决于编译器,但让我们将讨论范围缩小到流行的现代讨论。)

编辑:让我们稍微简化一下,因为在一般情况下似乎没有达成共识。如果ReturnValue是一个 int,我们返回 0 而不是successfulResultObject呢?

c++ compiler-construction gcc return visual-c++

6
推荐指数
1
解决办法
1722
查看次数

定时器来衡量延迟

在通过TCP测量任何协议中的网络延迟(接收时间ack - 发送时间msg)时,您建议使用什么计时器?为什么?它有什么分辨率?还有什么其他优点/缺点?

可选:它是如何工作的?

可选:你不使用什么计时器,为什么?

我主要关注Windows/C++解决方案,但如果您想对其他系统发表评论,请随意这样做.

(目前我们使用GetTickCount(),但它不是一个非常准确的计时器.)

c++ winapi latency timer

5
推荐指数
1
解决办法
3498
查看次数

gvim中的鼠标输入

可以在vim中定制标准鼠标输入(在我的情况下是gvim)吗?插件也是可以接受的选项.

我特别感兴趣的是"覆盖"双击一个单词,这样gvim不会只是突出显示单词,而是进行搜索,从而突出显示文件中该单词的所有实例.我在其他编辑器中看到过这个功能,发现它非常有用.

vim

3
推荐指数
1
解决办法
959
查看次数

窗口服务停止,但进程继续运行

我正在开发一个Windows服务应用程序,并注意到一个不寻常的问题.首先,我从Windows服务窗口运行该服务,并等待状态转为"已启动".几分钟后,我点击停止,20秒左右服务状态变为空白,表示服务已停止.然而,此服务背后的过程继续运行,并且可以在状态更新后的任务管理器中看到10-30秒.我在Windows 7sp1上运行.我还检查了事件查看器,它没有显示我的服务中的任何错误.(我提到这个的原因是因为我最初怀疑表单的超时错误"等待来自x服务的事务响应时达到超时.")

什么可能导致流程状态和服务状态之间的差异?

c++ windows service

3
推荐指数
1
解决办法
2479
查看次数

如何获取动态创建的内存的数组大小

考虑一个例子:

void main()
{
    int *arr;
    arr=new int[10];
}
Run Code Online (Sandbox Code Playgroud)

我怎么知道arr的大小?

c++ arrays

2
推荐指数
2
解决办法
5597
查看次数

C++调用堆栈不符合标准?

C++标准是否谈论调用堆栈?常见的知识是如何在C++中使用堆栈和堆,但我正在阅读标准并且没有提及它.

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf

这是由编译器实现的东西,但每个人都同意,或者我在浏览文档时错过了什么?

c++ standards stack

2
推荐指数
1
解决办法
170
查看次数