假设我们有一个用 C++ 编写的 SDK,它接受一些二进制数据(如图片)并执行一些操作。难道不能让这个SDK“防撞”吗?崩溃主要是指由于用户传递的无效输入(例如异常短的垃圾数据),操作系统在内存访问冲突时强制终止。
我没有使用 C++ 的经验,但是当我用谷歌搜索时,我发现了几种听起来像解决方案的方法(使用向量而不是数组,配置编译器以便执行自动边界检查等)。
当我向开发人员介绍这个时,他说这仍然是不可能的。不是我不相信他,但如果是这样,像 Java 这样的语言是如何处理这个的?我认为 JVM 每次都会执行边界检查。如果是这样,为什么不能手动在 C++ 中做同样的事情?
更新
“防崩溃”并不是说应用程序不会终止。我的意思是它不应该在没有发生情况的信息的情况下突然终止(我的意思是它会转储核心等,但是不可能显示“参数 x 无效”等消息吗?)