当用valgrind/callgrind运行我的程序时,我得到以下消息:
==21734== brk segment overflow in thread #1: can't grow to 0x4a39000
(使用不同的地址)
请注意,它之前没有堆栈溢出消息.
我找不到关于此消息的任何文档,我不知道究竟是什么溢出.
任何人都可以帮我弄清问题是什么?这是valgrind或我的程序的问题吗?
我对 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)
谢谢您的帮助!问候
我想有一个抽象类型的可选对象.但是,对于抽象类型,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)
仅使用指针似乎也不是可行的解决方案,因为某些函数需要返回包含可选值作为成员的对象,尽管期望函数的调用者是该成员变量的所有者是不合逻辑的.
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) 当我尝试使用该方法时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) 无穷大不是任何标准数学中的数字,这将导致人们思考表达
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:请省略对被排除在中的法律的任何评论.;)
是否std :: unordered_map中的所有键都保证具有相同的哈希值?或者具有不同哈希值的密钥是否位于同一个存储桶中?
在同一个桶中是否意味着具有相同的哈希?
我想知道给定值附近浮点数的epsilon.
std::numeric_limits<floating_point_type>::epsilon() 提供仅适用于数字1.0,而我想要一个函数来处理任何数字.
这有什么标准库解决方案吗?如果不是 - 我应该如何实现这个功能?