标签: overrun

Valgrind 数组在对象内溢出

我有一个简单的程序,如下所示。

struct Test
{
    int a[5];
    int b;
};

int main()
{
    Test* t = new Test;
    t->b = 1;
    t->a[5] = 5;          //This is an illegal write
    cout << t->b << endl; //Output is 5
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用 Valgrind Memcheck 运行它没有报告非法内存写入。

我注意到 Valgrind 声称 Memcheck 工具无法检测全局或堆栈数组溢出,但这个数组在堆中,对吗?只是数组在一个对象中。

是 Valgrind 真的无法检测到这种错误还是只是我做错了什么?如果前者是真的,那么有没有其他工具可以检测这种类型的错误?

================================================== ========================

更新:

我使用的编译命令是g++ -O0 -g main.cc. 该valgrind命令很简单valgrind ./a.outmemcheck默认情况下应该调用该工具。

编译器版本是gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)valgrind版本是 …

c++ valgrind overrun

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

在Java中使用long转换为byte

我无法理解以下内容:

在java中,

long l = 130L;  
byte b = (byte)l;
Run Code Online (Sandbox Code Playgroud)

如果我打印b的值,为什么我得到-126?长l的位代表是什么?

java integer casting overrun

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

如果溢出则调整 JavaFX 标签的大小

我在 TitledPane 的 GridPane 中有一个标签。如果超出范围,我希望它逐步缩小 0.05em,这样三个点(“长标签...”)就不会显示 -> “长标签”小。

Label 的 isOverrun() 方法会很棒,但 JavaFX 不提供该方法,而且生活也不是一场愿望音乐会。
所以到目前为止我的解决方法:

    Bounds tpBounds = tPane.getBoundsInLocal();
    Bounds lblBounds = label.getBoundsInLocal();
    Double fontSize = 1.0;

    while (tpBounds.getWidth() < lblBounds.getWidth() && fontSize > 0.5) {
        fontSize = fontSize-0.05;
        label.setStyle("-fx-font-size: "+fontSize+"em;");

        System.out.println(fontSize+" "+tpBounds.getWidth()+" "+lblBounds.getWidth());
    }
Run Code Online (Sandbox Code Playgroud)

问题:在 while 循环期间,bounds.getWidth() 始终显示原始宽度。新字体大小的“新”宽度刷新速度不够快,无法被 while 条件捕获,因此字体大小越来越小。
有什么解决方案吗?

编辑
我更常问:缩小标签本身,直到它适合而不被截断,真的那么难吗?

label resize javafx ellipsis overrun

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

标签 统计

overrun ×3

c++ ×1

casting ×1

ellipsis ×1

integer ×1

java ×1

javafx ×1

label ×1

resize ×1

valgrind ×1