gpt4 book ai didi

android - Android NDK 中的函数调用崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:09 24 4
gpt4 key购买 nike

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

numin_read(ns,values+data_spec->N_inputs*i+j0);

ns 是一个指向结构的指针,values 是一个指向 double 组的指针,其余只是一个整数偏移量,所有这些都是有效的(ns 已经在调用此函数和 malloc 调用时使用检查 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 据我所知,它与内存分配有关吗?但我不是 malloc-ing,我只是在调用一个函数……我错过了什么?

最佳答案

表达式

values+data_spec->N_inputs*i+j0

相同
values[data_spec->N_inputs * i + j0]

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

关于android - Android NDK 中的函数调用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7714593/

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