小编Ted*_*ddy的帖子

即使不执行返回,非void函数也能正常工作

我是一名计算机科学专业的大学生.昨天,我有一个关于使用C++的二进制搜索树的课程.我们由该班的实验室助理教授.

他们将树中的节点定义为这样的结构:

struct Data{
    char name[15];
    int age;
    Data *left,*right;
};
Run Code Online (Sandbox Code Playgroud)

他们给了我们一个在BST内搜索的代码,如下所示:

// temp is current node, name is the value of the node to be searched for.
Data* search(Data *temp,char name[]) {
    if(strcmp(temp->name,name)>0)
        search(temp->left,name);
    else if(strcmp(temp->name,name)<0)
        search(temp->right,name);
    else
        return temp;
}
Run Code Online (Sandbox Code Playgroud)

我注意到代码是错误的.如果函数进入第一个或第二个if块,它将不执行任何return语句.

但是当实验室助理运行代码时,它运行得很好.

我想也许这种行为是特定于编译器的.但是当我在gcc上尝试该代码时,该函数也可以正常工作.(我们大学使用microsoft visual c ++编译器)

任何人都可以解释发生了什么?为什么这段代码有效?

PS:忽略其他错误,例如当节点为空时,找不到值等.

c++ function binary-search-tree

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

Java内存使用沙箱

我正在尝试为不受信任的Java代码编写沙箱.
我用java编写了沙盒.沙箱需要:

  1. 限制不可信代码的内存使用量.如果不受信任的代码使用的内存超过指定的限制,则沙箱应终止该程序.
  2. 如果不受信任的代码未超过指定的限制,则沙箱也应该能够确定使用的"最大内存峰值".

顺便说一句,当我在这里说内存时,它意味着堆+非堆内存.

我发现,你可以设置内存阈值和通知,如果一个内存池超过阈值.但这不是我想要的,因为我想设置Heap + Non-Heap内存的限制.

我现在有唯一的解决办法是调查每个小毫秒,获得堆+使用getHeapMemoryUsage()getNonHeapMemoryUsage()从非堆内存和MemoryMXBean,并检查它是否超出了限制.

但我知道这个解决方案肯定也不好(并且有缺陷).还有其他更好的解决方案吗?

java memory-management sandbox

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