gpt4 book ai didi

android - 将私有(private)字段添加到 android 上的 JNI 类会卡住应用程序

转载 作者:行者123 更新时间:2023-11-28 05:52:42 25 4
gpt4 key购买 nike

我正在开发一个使用一些 native 代码的 Android 应用程序。我让它工作,然后我做了一些更新并运行了我的测试。每次我调用 native 函数并且数据的内部链接停止时,应用程序都会卡住。

我设法将原因隔离到一行,但该行不应该产生那种影响。

std::vector<float> OrderedPointCloud;

//std::vector<float> testeatetaetart; //Problem

std::vector<float> Pose;

这很好用。

std::vector<float> OrderedPointCloud;

std::vector<float> testeatetaetart; //Problem

std::vector<float> Pose;

这会卡住并打乱链接。

我不知道这个声明会导致应用程序失败。我试过重命名它,改变类型,制作不同类型的字段并添加更多字段。没有任何影响结果。

在 C++ 的类中可以有多少个字段没有限制,字段的顺序和位置无关紧要。我没有发现冲突的命名错误,并且该字段未被使用。除非 android 有一些限制或怪癖,否则我看不出可能由此产生的问题。

我不知道是什么原因造成的,我没有收到任何错误,也不知道到哪里寻找更多信息。任何帮助将不胜感激。

最佳答案

这称为“未定义行为”。

C++ 代码中某处的错误会导致堆或堆栈损坏。在这种情况下,程序执行并不总是立即失败。它通常会持续一段不确定的时间,因为代码不会立即尝试使用被覆盖或损坏的内存部分。但是,在稍后的某个时间点,当代码确实尝试在损坏的内存区域中取消引用指针或类似的东西时,事情就会在那个时候迅速崩溃。

例如,我可以编写一个简单的 main(),随着第一个业务订单的进行,并通过运行超过本地声明的数组的末尾来清除堆栈。我的 main() 会愉快地继续并做很多其他事情,进行计算,打印一些消息,当 main() 返回时它最终会崩溃。除了错误不在 main() 返回的位置,而是更早的位置。

您很可能就是这种情况。在您的情况下,只有在以某种特定顺序声明静态范围的对象时才会看到错误的影响,这会导致重要的静态范围的对象由于错误而在某些时候被覆盖,从而导致锁定程序。当静态作用域的对象以不同的顺序声明时,损坏的位将是代码已经使用但不再需要的位,因此看不到错误的影响。

您将需要学习如何使用任何可用的调试或静态分析工具来隔离和定位代码中的实际错误。你的问题的真正答案只有你自己能弄清楚,没有其他人能知道,因为只有你才能访问你的实际代码,你的整个代码,并且可以检查它。

欢迎使用 C++。

关于android - 将私有(private)字段添加到 android 上的 JNI 类会卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com