Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK/JNI:malloc全局(静态字符*)变量不带free ok吗?_Android_Memory_Android Ndk_Java Native Interface - Fatal编程技术网

Android NDK/JNI:malloc全局(静态字符*)变量不带free ok吗?

Android NDK/JNI:malloc全局(静态字符*)变量不带free ok吗?,android,memory,android-ndk,java-native-interface,Android,Memory,Android Ndk,Java Native Interface,我有一个android应用程序,它有一些JNI方法。 这些方法中的每一种都主要用于java反射,为此,我需要一些java方法/类/等的字符串名称——在我的例子中它们不是常量。 所以我想做一些JNI初始化工作,在从java调用这些JNI方法之前准备这些字符串-我使用malloc全局字符串变量static char*分配,每当调用这些方法时,它们都会在这些方法中使用 分配/取消分配此类全局变量的最佳方式是什么? 我可以使用常量,但我需要在初始化期间在运行时修改它们的值 现在我有一个初始化方法,我从A

我有一个android应用程序,它有一些JNI方法。 这些方法中的每一种都主要用于java反射,为此,我需要一些java方法/类/等的字符串名称——在我的例子中它们不是常量。 所以我想做一些JNI初始化工作,在从java调用这些JNI方法之前准备这些字符串-我使用malloc全局字符串变量static char*分配,每当调用这些方法时,它们都会在这些方法中使用

分配/取消分配此类全局变量的最佳方式是什么? 我可以使用常量,但我需要在初始化期间在运行时修改它们的值

现在我有一个初始化方法,我从Application.onCreate调用它——它分配50个字符串变量static char*并分配它们。 但我从来不打免费电话

这种方法会有什么问题吗? 例如,当应用程序被系统杀死时,是否会出现内存泄漏或损坏? 如果我的应用程序在调用Create后再次启动,并且变量再次初始化,该怎么办? 我自己也没见过这样的问题,但记忆就是这样一回事。。。也许这只是我的运气:


我曾想过在JNI_OnLoad中进行初始化,但同样——什么时候释放资源?

如果进程死亡或被终止,它的所有内存都会被释放。但是,如果现有进程中的另一个onCreate将导致您重新分配这些项而不释放旧项,那么您应该修复内存泄漏。或者将它们作为单例处理,在源代码中静态分配它们,而不是使用malloc,或者在完成后释放它们。如果内存泄漏,最坏的情况会发生什么?应用程序崩溃?如果漏洞足够大,其他应用程序将开始被关闭,为您的应用程序腾出空间,如果用户使用多个应用程序,这将导致系统陷入瘫痪。如果你的应用程序足够大,一旦用户离开它,它就会被杀死。在某个时候,设备会耗尽内存,你的应用程序将被终止,尽管系统会尽力不终止前台应用程序。即使泄漏很小,找出避免泄漏的方法也是很有用的,这样当你在设计未来的组件时,你会自动地做正确的事情。