我是一名计算机科学专业的大学生.昨天,我有一个关于使用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:忽略其他错误,例如当节点为空时,找不到值等.
我正在尝试为不受信任的Java代码编写沙箱.
我用java编写了沙盒.沙箱需要:
- 限制不可信代码的内存使用量.如果不受信任的代码使用的内存超过指定的限制,则沙箱应终止该程序.
- 如果不受信任的代码未超过指定的限制,则沙箱也应该能够确定使用的"最大内存峰值".
顺便说一句,当我在这里说内存时,它意味着堆+非堆内存.
我发现,你可以设置内存阈值和通知,如果一个内存池超过阈值.但这不是我想要的,因为我想设置Heap + Non-Heap内存的限制.
我现在有唯一的解决办法是调查每个小毫秒,获得堆+使用getHeapMemoryUsage()getNonHeapMemoryUsage()从非堆内存和MemoryMXBean,并检查它是否超出了限制.
但我知道这个解决方案肯定也不好(并且有缺陷).还有其他更好的解决方案吗?