小编Pub*_*bby的帖子

VS2012,C++ 11和内存泄漏检测(VLD与CRTDBG)

我在CRTDBG中检测到了一堆内存泄漏,但发现它们很难跟踪,因此安装了Visual Leak Detection.这显示了一致的泄漏数量,我追溯到没有虚拟析构函数的抽象类.我修复了这个问题,VLD现在在我的应用程序中没有显示内存泄漏,但是CRTDBG仍然会这样做,并且它一直显示大约100个左右的泄漏.

可以使用C++ 11信任这些工具中的任何一个吗?我大量使用独特的指针,几乎没有任何新的对象没有它们,所以无法理解泄漏的来源.

c++ memory-leaks c++11 visual-studio-2012

10
推荐指数
1
解决办法
2389
查看次数

有一个指向保留向量元素的指针是否合法?

我很好奇这种事情是否合法:

std::vector<some_class_type> vec;
vec.reserve(10);
some_class_type* ptr = vec.data() + 3; // that object doesn't exist yet
Run Code Online (Sandbox Code Playgroud)

请注意,我没有尝试访问指向的值.

这是标准所说的data(),但我不确定它是否相关:

返回:指针,这[data(),data() + size())是一个有效的范围.对于非空向量,data() == &front().

c++ pointers vector undefined-behavior language-lawyer

10
推荐指数
1
解决办法
453
查看次数

为什么extern可以应用于定义?

为什么合法?

extern int foo = 0xF00; // Gets a warning, still compiles

extern void bar() { // No warning
  int x;
}
Run Code Online (Sandbox Code Playgroud)

是否有理由允许这样做?

c c++ extern

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

如何比较两个CharSequences中的字符

我应该如何比较两个CharSequences的两个字符?

这是我的两个CharSequence:

CharSequence name1 = fname.getText();
CharSequence name2 = sname.getText();
Run Code Online (Sandbox Code Playgroud)

如果我尝试比较这样:

if(name1[i] == name2[j])
Run Code Online (Sandbox Code Playgroud)

..给了我错误.

java android string-comparison

9
推荐指数
3
解决办法
5万
查看次数

如何衡量多线程代码如何扩展(加速)?

假设我只有4个核心,那么衡量程序加速的最佳方法是什么?显然我可以测量到4,但是知道8,16等等会很好.

理想情况下,我想知道每个线程数的加速量,类似于此图:

阿姆达尔的法律图

有什么方法可以做到这一点吗?也许是一种模拟多核的方法?

c++ parallel-processing multithreading profiling

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

如何清楚地指定我传递的参数和哪些参数保持默认值?

因为这个问:c ++中的默认参数

说我有这样的功能: void f(int p1=1, int p2=2, int p3=3, int p4=4);

我想只使用一些参数调用它 - 其余的将是默认值.

像这样的东西会起作用:

template<bool P1=true, bool P2=true, bool P3=true, bool P4=true>
void f(int p1=1, int p2=2, int p3=3, int p4=4);
// specialize:
template<>
void f<false, true, false, false>(int p1) {
  f(1, p1);
}
template<>
void f<false, true, true, false>(int p1, int p2) {
  f(1, p1, p2);
}
// ... and so on. 
// Would need a specialization for each combination of arguments
// which is …
Run Code Online (Sandbox Code Playgroud)

c++ overloading default-arguments c++11

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

display:flex随机变成display:block with jquery hide/show和google webfont

css("display")在一个元素上调用jquery时,我得到了不可预知的结果; 有时它是flex,有时它是block.奇怪的是,这个错误仅在我使用jquery的show/时出现hide,并且错误发生在大约50%的时间.更奇怪的是,我甚至在跑步前都 看到了这些结果hide.

更新:它似乎也与这个google webfont css绑在一起.如果我删除字体问题就会消失.这一切都很奇怪.

这是我的代码的简化:


JS:

$(document).ready(function () {
    console.log("1 display: " + $("#foo").css("display"));
    $("#foo").hide();
    console.log("2 display: " + $("#foo").css("display"));
    $("#foo").show();
    console.log("3 display: " + $("#foo").css("display"));
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <script type="text/JavaScript"
            src="http://code.jquery.com/jquery-1.6.3.min.js"></script>
        <script type="text/JavaScript" src="script.js"></script>
        <link href='http://fonts.googleapis.com/css?family=Forum' rel='stylesheet' type='text/css'>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
        <div id="foo" class="centerer">
            <p>Hello!</p>
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS:

#foo {
    background: white …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery

8
推荐指数
1
解决办法
3133
查看次数

什么是 - >, - >*和.*运算符的正确术语?

维基百科将它们称为:

- >对象的成员b指向的一个
- >*由a指向的对象指向的
成员.*成员b指向的成员

但我需要在不使用"a"和"b"的情况下引用它们.他们有名字吗?

c++ naming operators operator-arrow-star

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

如何在大型c ++ Linux应用程序中检查内存泄漏?

我目前正在开发一个大规模的应用程序项目(用c ++编写),它从一开始就是从头开始,我们已经到了强制要求对内存泄漏进行检查的时候了.

该应用程序在Ubuntu Linux上运行,它具有大量的多媒体内容,并使用OpenGl,SDL和ffmpeg用于各种目的,包括3D图形渲染,窗口,音频和电影播放.您可以将其视为视频游戏,虽然它不是,但通过将其视为视频游戏,可以简化应用程序的职责.

我目前有点无能为力地确定我们是否还有内存泄漏.在过去,我们已经确定了一些,并删除了它们.这些天,应用程序已接近完成,我们运行的测试给了我一些我无法弄清楚的结果.

我做的第一件事是尝试通过Valgrind运行应用程序...不幸的是,当在valgrind环境中运行时应用程序崩溃."非确定性"崩溃,因为它在各个不同的地方崩溃.所以我放弃了Valgrind来轻松识别潜在泄漏的来源,并最终使用了两个Linux命令:free和top.

在应用程序运行时,free用于探测系统内存使用情况

top与'-p'选项一起使用,以在运行时探测应用程序进程内存使用情况.

输出表单top和free将被转储到文件中以进行后处理.我用问题底部链接的数据组成了两个图表.

测试用例非常简单:一旦应用程序启动并等待命令,就会探测有关内存的数据.然后我开始一系列命令,这些命令反复执行相同的操作.该应用程序有望将大量多媒体数据加载到RAM中,然后下载.

不幸的是,图表没有显示我的期望.内存使用量通过3个不同的步骤增长,然后停止.内存显然从未发布,这暗示我有一个巨大的内存泄漏.这将是完全正常的,因为这意味着我们很可能没有释放被媒体吸收的记忆.

但是在前三个步骤之后...内存使用情况稳定......没有更大的步骤......只是轻微的上下,这与预期的数据加载和卸载相对应.这里出乎意料的是,应该加载/卸载的数据占据了百万兆字节的RAM,而不是只有少数兆字节的数据(比如8-10 MB).

我目前在解释这些数据时非常无能为力.

任何人都有一些提示或建议吗?我错过了什么?我用来检查宏观内存泄漏是否存在完全错误的方法?你知道Valgrind以外的任何其他(最好是免费的)工具来检查内存泄漏吗?

系统内存使用情况图

进程内存使用图

c++ linux memory-leaks memory-management

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

C++20 对 reverse_iterator 的哪些更改破坏了这段代码?

以下代码可在 C++11、C++14 和 C++17 中编译,但不能在 C++20 中编译。标准的什么变化破坏了这段代码?

#include <vector>
#include <utility>

template<typename T>
struct bar
{
    typename T::reverse_iterator x;
};

struct foo
{
    bar<std::vector<std::pair<foo, foo>*>> x;
};

int main()
{
    foo f;
}
Run Code Online (Sandbox Code Playgroud)

错误很长,但可以总结为:

模板参数必须是一个完整的类

c++ language-lawyer reverse-iterator c++20

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