假设我们在C++中有一个SDK,它接受一些二进制数据(如图片)并做一些事情.是不是可以使这个SDK"防崩溃"?由于用户传递的无效输入(如异常短的垃圾数据),我主要意味着操作系统在内存访问冲突时强行终止.
我没有使用C++的经验,但是当我用Google搜索时,我发现了几个听起来像解决方案的方法(使用向量而不是数组,配置编译器以便执行自动边界检查等).
当我提出这给开发者,他说,这仍然是不可能的..不,我不相信他,但即便如此,是怎么样的Java语言处理呢?我以为JVM每次都会执行边界检查.如果是这样,为什么不能手动在C++中做同样的事情?
更新
"防止崩溃"我并不是说应用程序不会终止.我的意思是它不应该突然终止没有发生的事情的信息(我的意思是它会转储核心等,但是不可能显示像"参数x无效"等消息吗?)
最近我一直很烦,因为我达到了C++(甚至0x)感觉非常有限的程度,所以我开始寻找替代方案.
忘记Java,C#,Python或Ruby.我仍然喜欢C++的低级特性,我不喜欢虚拟机.此外,我是一个游戏引擎开发,所以我必须要发展核心程序必须是非常快,而且最近我已经饿了码表现.C++ 对我来说几乎是一种语言,但是关于如何使用模板有很多例外,而GCC并没有像我希望的那样优化内容.
所以我正在考虑开始学习D.
你认为它足以满足我作为游戏开发者的需求吗?我很谨慎,因为我从来没有听说过D被用于那个.
谢谢!
我很想知道用什么软件在iphone中的会说话的tom应用程序中创建3D Cat.它是用OpenGL ES完成的吗?
http://itunes.apple.com/us/app/talking-tom-cat/id377194688?mt=8
class WithPrivateFinalField {
private final String s = "I’m totally safe";
public String toString() {
return "s = " + s;
}
}
WithPrivateFinalField pf = new WithPrivateFinalField();
System.out.println(pf);
Field f = pf.getClass().getDeclaredField("s");
f.setAccessible(true);
System.out.println("f.get(pf): " + f.get(pf));
f.set(pf, "No, you’re not!");
System.out.println(pf);
System.out.println(f.get(pf));
Run Code Online (Sandbox Code Playgroud)
输出:
s = I’m totally safe
f.get(pf): I’m totally safe
s = I’m totally safe
No, you’re not!
Run Code Online (Sandbox Code Playgroud)
为什么它以这种方式工作,你能解释一下吗?第一个印刷品告诉我们私人"s"字段没有像我期望的那样被改变.但是如果我们通过反射获得该字段,则第二个打印显示,它会更新.
我有一个包含3列x,y,z的数据文件,我想做一个3D图来可视化表面.
我本可以使用meshgrid,但问题是我只有那些y <= x的数据.有办法吗?
一个例子:
x y z ============ 1 1 0.5 2 1 0.3 2 2 1.2 3 1 1.1 3 2 8.0 3 3 1.4 ============
我想知道是否有办法用rails做到这一点.基本上我有一个用户模型和一个事件模型.事件由用户创建,我希望在事件模型中具有指示谁创建事件的外键(user_id).此外,事件可以有许多用户参与其中,因此事件模型变得类似
belongs_to :user
has_many :users, :through => :guests #suppose i have the guest model
Run Code Online (Sandbox Code Playgroud)
而用户模型看起来像
has_many :events, :through => :guests
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过这个协会,但我希望能说
e = Event.find(1)
e.creator #returns the user who created this event
Run Code Online (Sandbox Code Playgroud)
代替
e.user
Run Code Online (Sandbox Code Playgroud)
有没有办法让我这样做?
我正在尝试使用此代码
result = arr['key1'] or arr['key2'] or arr['key3']
Run Code Online (Sandbox Code Playgroud)
解释:我希望从或者dict键得到结果值.键的可用性取决于环境.这不是关于None ..只能定义一个arr键...
那么有一个函数或方法,如is_defined()
我们如何在python中执行此操作?
UPDATE
我在这里遇到了一个新问题.代码1:
try:
urlParams += "%s=%s&"%(val['name'], data.get(val['name'], serverInfo_D.get(val['name'])))
except KeyError:
print "expected parameter not provided - "+val["name"]+" is missing"
exit(0)
Run Code Online (Sandbox Code Playgroud)
代码2:
try:
urlParams += "%s=%s&"%(val['name'], data.get(val['name'], serverInfo_D[val['name']]))
except KeyError:
print "expected parameter not provided - "+val["name"]+" is missing"
exit(0)
Run Code Online (Sandbox Code Playgroud)
请参阅serverInfo_D [val ['name']]和serverInfo_D.get(val ['name'])中的差异代码2失败,但代码1正常工作
数据
serverInfo_D:{'user': 'usr', 'pass': 'pass'}
data: {'par1': 9995, 'extraparam1': 22}
val: {'par1','user','pass','extraparam1'}
Run Code Online (Sandbox Code Playgroud)
针对数据dict ..以及for循环中迭代val的所有代码引发异常
同事已经在我们的库中添加了几次assert命令,在那里我将使用if语句并抛出异常.(在此之前我从未听说过断言.)以下是他如何使用它的一个例子:
assert('isset($this->records); /* Records must be set before this is called. */');
Run Code Online (Sandbox Code Playgroud)
我会做的:
if (!isset($this->records)) {
throw new Exception('Records must be set before this is called');
}
Run Code Online (Sandbox Code Playgroud)
通过在assert上阅读PHP文档,看起来建议您确保assert处于活动状态并在使用assert之前添加处理程序.我找不到他这样做的地方.
所以,我的问题是,鉴于上述情况,使用断言是一个好主意,我应该更频繁地使用它而不是if和例外吗?
另外,我们计划在各种项目和服务器上使用这些库,包括我们甚至可能不参与的项目(库是开源的).这在使用assert时有什么不同吗?
我创建了一个测试程序,它创建了20个线程,然后这些线程将打开许多sql连接.让我们说你正在从eclipse执行这个程序,现在如果你将关闭eclipse.这会关闭所有打开的SQL连接吗?如果不是那么这些会发生什么?它会在数据库端显示100个打开的连接吗?如果是,那么在这种情况下该怎么办?