Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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中函数调用崩溃_Android_C_Android Ndk - Fatal编程技术网

Android NDK中函数调用崩溃

Android NDK中函数调用崩溃,android,c,android-ndk,Android,C,Android Ndk,我正在开发一个基于Android的项目,需要一些组件通过NDK运行,因为我使用的是已经用C编写的代码。我遇到了一个非常奇怪的问题,程序在调用特定函数时崩溃: numin\u read(ns,值+数据规格->N\u输入*i+j0) ns是指向结构的指针,value是指向双数组的指针,其余只是一个整数偏移量,所有这些都是有效的(在调用此函数并检查malloc调用是否有空指针时,ns已经被使用)。该函数位于另一个*.c文件(numin.c)中,其声明(在numin.h中)为 void numin_re

我正在开发一个基于Android的项目,需要一些组件通过NDK运行,因为我使用的是已经用C编写的代码。我遇到了一个非常奇怪的问题,程序在调用特定函数时崩溃:

numin\u read(ns,值+数据规格->N\u输入*i+j0)

ns是指向结构的指针,value是指向双数组的指针,其余只是一个整数偏移量,所有这些都是有效的(在调用此函数并检查malloc调用是否有空指针时,ns已经被使用)。该函数位于另一个*.c文件(numin.c)中,其声明(在numin.h中)为
void numin_read(numin_source*,double*)

这甚至不是程序第一次从numin.c调用函数,而是唯一一次崩溃。我知道这不是函数中导致崩溃的原因,因为如果我返回第一行,它仍然会导致崩溃

我正在努力让调试器连接到程序(尽管做了所有描述的事情),所以我真的不知道那里发生了什么。有人知道为什么这样不行吗?我在Linux上使用过这段代码,效果很好

很抱歉,如果没有什么事情要做,我将继续尝试连接调试器,以便提供更多详细信息。请让我知道你还需要什么信息

编辑:我不知道这是否有区别,但为了构建程序,我将每个c文件编译成一系列对象文件(使用NDK独立工具链),将这些对象文件归档到ar归档中,然后在将主c文件放入我通过NDK调用的共享库时,将其作为预构建的静态库调用

编辑:这太奇怪了。我将numin_read的定义更改为
void numin_read()
,并注释掉了除了一条返回语句之外的所有代码。本质上,我调用的函数不接受任何参数,只返回。。。它仍然崩溃! 不过,我确实设法从LogCat中获得了一些信息:
信号11(SIGSEGV)、代码1(SEGV_MAPERR)、故障地址00000004
据我所知,这与内存分配有关?但我不是在malloc-ing,我只是在调用一个函数。。。我错过了什么

表达式

values+data_spec->N_inputs*i+j0

values[data_spec->N_inputs * i + j0]

我怀疑你试图访问一个你实际上无法访问的元素。。。或者可能是未初始化的元素。

这不是我有史以来最辉煌的时刻,我用来构建最终NDK共享库的.h文件不是我用来构建对象文件的原始.h文件的符号链接。这意味着我对它们所做的任何更改都不会通过。。。仍然需要检查是否一切正常,但很抱歉浪费了您的时间…

提高编译器的警告级别,并注意警告。@pmg无论是调用文件还是numin.c文件,在任何一个负责的函数中都没有警告。我用-Wall-Wextra编译…对于第一次迭代,我是0,这意味着一切都简化为值。。。我将仔细检查是否可以访问数组…值分配正确,我向其中写入,然后打印出内容,但这只是作为指针,以便从函数中的文件读取的值存储在数组中。该函数对文件中的每一行调用一次,因此需要偏移量。尽管如此,当我什么也没传进去,只是回来的时候,它还是崩溃了。。。我不是C方面的专家,但我以前从未遇到过这样的事情……您肯定在代码中的某个地方调用了未定义的行为,可能会弄乱堆栈。注意所有类型转换,确保所有函数都有正确的原型,而不仅仅是
numin\u read
!谢谢,我会调查的。会不会有什么东西出现在-Wall-Wextra身上?因为我用这些标志重新编译了所有东西,我得到的最多的是一系列“有符号和无符号整数表达式之间的比较”和“在“| |”中建议在“&&”周围加括号”。但是,如果这是我的代码,它会有所帮助……使用
gcc
添加
-Wmissing原型。如果代码不需要gnu特定的扩展名,也可以尝试
-std=c89-pedantic
-std=c99-pedantic
。它现在正在工作,这个答案是正确的,但是程序一直崩溃,因为函数读取的文件中有错误。谢谢你的帮助!