我正在开发一个基于Android的项目,需要一些组件通过NDK运行,因为我使用的是已经用C语言编写的代码。我遇到一个非常奇怪的问题,当调用特定函数时程序崩溃:
numin_read(ns,values+data_spec->N_inputs*i+j0);
ns是指向struct的指针,values是指向double数组的指针,其余只是一个整数偏移量,所有这些都是有效的(在调用此函数和malloc调用时已经使用了ns)检查是否为NULL指针)。该函数位于另一个* .c文件(numin.c)中,并且它的声明(在numin.h中)是
void numin_read (numin_source *, double *);
这甚至不是程序第一次从numin.c调用函数,而是唯一崩溃的函数。我知道这不是导致崩溃的函数中的东西,因为如果我在第一行返回它仍然会这样做。
我很难让调试器附加到程序上(尽管做了所有描述的here)所以我真的不知道那里发生了什么。任何人都知道为什么这不起作用?我在Linux上使用过这段代码,效果很好。
很抱歉,如果没有什么可继续的,我会继续尝试让调试器附加,这样我就可以提供更多详细信息。请告诉我您需要的其他信息。
编辑:我不知道这是否有所不同但是为了构建程序,我将每个单独的c文件编译成一系列目标文件(使用NDK独立工具链),将这些目标文件存档到一个ar存档,然后在将主c文件放入我通过NDK调用的共享库时将其作为PREBUILT_STATIC_LIBRARY调用...
编辑:这太奇怪了。我将numin_read的定义更改为void numin_read()
并注释掉除了单个return语句之外的所有代码。基本上我正在调用一个不带参数的函数,只返回......它仍然崩溃!
我确实设法从LogCat中获取了一些东西:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004
据我所知,它与内存分配有关?但是我不是动画片,我称之为正常功能......我错过了什么?
答案 0 :(得分:0)
表达式
values+data_spec->N_inputs*i+j0
与
相同values[data_spec->N_inputs * i + j0]
我怀疑你试图访问一个你根本无法访问的元素......或者可能是一个未初始化的元素。
答案 1 :(得分:0)
不是我最亮的时刻,我用来构建最终NDK共享库的.h文件不是我用来构建目标文件的原始.h文件的符号链接。这意味着我对这些所做的任何改变都没有通过传播...仍然需要检查现在一切都很好但很抱歉浪费你的时间......