Android NDK-BUILD 程序在静态数组分配时崩溃

标签 android c android-ndk segmentation-fault

我是 android 编程的新手。我有一个使用 NDK-Build 构建的 native C 应用程序。我正在其中一个线程中进行静态分配。

整数 X[64][4096];//<-- 正好需要 1 MB 空间。

当我使用 adb shell 运行它时,出现“段错误”。如果我将数组缩减为 X[63][4096],它似乎运行良好。现在我知道在 Android 中有一个 16MB 或类似的限制用于 VM,但是这个程序几乎没有分配占用 2MB 的 RAM(并且设置 ->应用程序显示我还有另外 650 MB 的备用内存)。

知道是什么导致了这次崩溃吗?以及如何解决?

问候

最佳答案

您所做的分配实际上不是静态的。如果 X 是函数内部的局部变量,每次进入函数时,它将在堆栈(通常比堆小得多)上动态分配,并在函数返回时释放。

如果您真的想让 X 成为静态的(即 X 应该有一个副本在线程函数的所有实例之间共享),您可以声明变量 静态
如果你想让每个线程都有自己的 X 副本,你应该使用 malloc()/new [] 在堆上明确分配空间,并使用 free()/delete [] 释放它

关于Android NDK-BUILD 程序在静态数组分配时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920588/

相关文章:

java - Android 加密 API 未生成 AES 的安全 IV

c - 使用 setitimer() 和 ITIMER_VIRTUAL 时,是什么导致虚拟运行时间变慢?

c - 如何查询根证书?

java - Android MotionEvent 等同于 Java MouseEvent?

android - 可靠的跨设备 android 相机实现?

android - 交互式 PDF 阅读器 : Android

android - Ubuntu 上的 Eclipse NDK 路径设置

c - NDK - 在 c 文件中使用 .so 文件

java - Intent 类型中的方法 putExtra(String, boolean) 不适用于参数 (String, CarouselDataItem)

arrays - 在 C 错误 "expected expression before ‘]’ token 中初始化数组”