小编Tim*_*ers的帖子

Valgrind报告了一个段溢出

当用valgrind/callgrind运行我的程序时,我得到以下消息:

==21734== brk segment overflow in thread #1: can't grow to 0x4a39000 (使用不同的地址)

请注意,它之前没有堆栈溢出消息.

我找不到关于此消息的任何文档,我不知道究竟是什么溢出.

任何人都可以帮我弄清问题是什么?这是valgrind或我的程序的问题吗?

c++ valgrind overflow callgrind

45
推荐指数
4
解决办法
2万
查看次数

如何将 JFormattedTextField 保持在非覆盖模式?

我对 JFormattedTextField 有一个问题,即将其保持在非覆盖模式。我找到了如何将其设置为非覆盖,即使用 setOverwriteMode(false)。

但是,虽然此功能允许我在字段中键入而不覆盖,但当焦点丢失并重新输入字段时,overWriteMode 会再次打开!

有没有办法让 overWriteMode 保持 false?我更喜欢一个不会​​在每次失去焦点时将其设置为 false 的解决方案,但如果这是唯一可能的解决方案,那就这样吧。

这就是我现在所拥有的:

    DefaultFormatter format = new DefaultFormatter();
    format.setOverwriteMode(false);

    inputField = new JFormattedTextField();
    inputField.setValue("don't overwrite this!");
    inputField.setColumns(20);
    format.install(inputField);// This does the trick only the first time I enter the field!
Run Code Online (Sandbox Code Playgroud)

我希望有一个人可以帮助我!

Robin 提出的解决方案:

    DefaultFormatter format = new DefaultFormatter();
    format.setOverwriteMode(false);

    inputField = new JFormattedTextField(format); // put the formatter in the constructor
    inputField.setValue("don't overtype this!");
    inputField.setColumns(20);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!问候

java swing overwrite jformattedtextfield

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

boost ::可选的抽象类类型

我想有一个抽象类型的可选对象.但是,对于抽象类型,boost :: optional失败:

#include <boost/optional.hpp>
class A { 
  virtual int getInt() = 0; 
};
class B : public A {
  int getInt() { return 666; };
};

int main() {
  boost::optional<A> maybeAnA;
  boost::optional<A> another(maybeAnA);
};
Run Code Online (Sandbox Code Playgroud)

结果是

error: invalid new-expression of abstract class type ‘A’
Run Code Online (Sandbox Code Playgroud)

仅使用指针似乎也不是可行的解决方案,因为某些函数需要返回包含可选值作为成员的对象,尽管期望函数的调用者是该成员变量的所有者是不合逻辑的.

c++ boost abstract-class optional

4
推荐指数
1
解决办法
1090
查看次数

通过位操作更快地实现Math.abs()

Math.abs(x)(由Oracle实施)的常规实现由

public static double abs(double a) {
  return (a <= 0.0D) ? 0.0D - a : a;
}
Run Code Online (Sandbox Code Playgroud)

仅将数字符号的一位编码设置为零(或一位)是否更快?我想只有一个位编码数字的符号,并且它总是相同的位,但是我可能是错的。

还是我们的计算机通常不适合使用原子指令对单个位进行操作?

如果可以更快地实施,您能给出吗?

编辑:

已经向我指出Java代码是平台无关的,因此它不能依赖于单机的原子指令是什么。但是,为了优化代码,JVM热点优化器确实考虑了计算机的具体情况,并且可能会应用正在考虑的最优化方法。

但是,通过一个简单的测试,我发现至少在我的机器上,该Math.abs功能似乎并未针对单个原子指令进行优化。我的代码如下:

    long before = System.currentTimeMillis();
    int o = 0;
    for (double i = 0; i<1000000000; i++)
        if ((i-500)*(i-500)>((i-100)*2)*((i-100)*2)) // 4680 ms
            o++;
    System.out.println(o);
    System.out.println("using multiplication: "+(System.currentTimeMillis()-before));
    before = System.currentTimeMillis();
    o = 0;
    for (double i = 0; i<1000000000; i++)
        if (Math.abs(i-500)>(Math.abs(i-100)*2)) // 4778 ms
            o++;
    System.out.println(o);
    System.out.println("using Math.abs: "+(System.currentTimeMillis()-before));
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

234
using multiplication: 4985 …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation absolute-value

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

listFiles(FileFilter) 而不是 listFiles(FileNameFilter)

当我尝试使用该方法时someFile.listFiles(FileFilter foobar)出现错误

File 类型中的 listFiles(FilenameFilter) 方法不适用于参数 (FileFilter)

虽然文件的javadoc中明确包含:public File[] listFiles(FileFilter filter)http://docs.oracle.com/javase/7/docs/api/java/io/File.html

我该如何解决这个问题?

PS:我的代码是:

    FileFilter folderFilter = new FileFilter() {
        public boolean accept(File file) {
            return file.isDirectory();
        }
        @Override
        public String getDescription() {
            return "some filter";
        }
    };
    File[] foobars = someFile.listFiles(folderFilter);
Run Code Online (Sandbox Code Playgroud)

java io filefilter

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

"isNaN(INFINITY)== false"是假的

无穷大不是任何标准数学中的数字,这将导致人们思考表达

Double.isNaN(Double.POSITIVE_INFINITY)
Run Code Online (Sandbox Code Playgroud)

应该评估true.但是,快速测试表明它的评估结果为false.仔细查看函数规范可以证实我的怀疑:"isNaN"不应被解释为"不是数字",而是"是非数字值".

我的问题是他们为什么这样实施呢?他们为什么不以这样的方式实现它false呢?它也会回归正或负无穷大?

在实践中,我现在使用的(Double.isNaN(x) || Double.isInfinite(x))方式比我只使用的方式更频繁Double.isNaN(x).因此,最好分别使用Double.isNaN(x)(Double.isNaN(x) && !Double.isInfinite(x))替代.

即使现在更改它会让人感到困惑 - 以我在这里描述的方式实现和解释函数会不会更好?

还有哪些其他因素在这里起作用?

PS:请省略对被排除在中的法律的任何评论.;)

.net c++ java nan infinity

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

unordered_map的存储桶中的所有元素都具有相同的散列吗?

是否std :: unordered_map中的所有键都保证具有相同的哈希值?或者具有不同哈希值的密钥是否位于同一个存储桶中?

在同一个桶中是否意味着具有相同的哈希?

c++ stl c++11

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

给定数字的浮点分辨率

我想知道给定值附近浮点数的epsilon.

std::numeric_limits<floating_point_type>::epsilon() 提供仅适用于数字1.0,而我想要一个函数来处理任何数字.

这有什么标准库解决方案吗?如果不是 - 我应该如何实现这个功能?

c++ floating-point epsilon

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