Gdb 在本机代码中使用从不同cpp文件传递的引用会导致分段错误

Gdb 在本机代码中使用从不同cpp文件传递的引用会导致分段错误,gdb,java-native-interface,android-ndk,Gdb,Java Native Interface,Android Ndk,我尝试过这样做:从另一个cpp文件调用函数(带有参数引用),我无法为引用传递的参数分配任何内容 在test.cpp中的函数Java_com_example_afeTest_testReference中 std::string a =""; const std::string x = "jo"; std::string y = "yi", z = "ta"; testFunc(a,x,y, z); // call test function which resides in s

我尝试过这样做:从另一个cpp文件调用函数(带有参数引用),我无法为引用传递的参数分配任何内容

在test.cpp中的函数Java_com_example_afeTest_testReference中

std::string a ="";
const std::string x = "jo";
std::string y = "yi", z = "ta";
testFunc(a,x,y, z);           // call test function which resides in same cpp no error
现在把这个函数放到test.cpp中,它就可以工作了

std::string& testFunc(std::string& a, const std::string& x, std::string& y, std::string& z){
    a = x;
    a +=y;
    a +=z;

    return a;
}
现在将这个testFunc放在另一个test2.cpp中&从test.cpp调用它,它将在之后产生分段错误 a=x


**所以,如果testFunc&Java\u com\u example\u afeTest\u testReference是它工作的同一个cpp文件,如果两个cpp文件中有两个函数,并且您想要传递引用,那么它会给出分段错误。我也与extern进行了检查。

您正在尝试修改原始const字符串的内容。这不是个好主意。丢弃data()返回值的常量也是令人讨厌的。我不确定这是否是你的过失的原因。在任何情况下,请尝试以下方法:

string tolower(const string& str){
    size_t iSize = str.size();
    string result = str;    
    for (size_t i=0; i<iSize; ++i) {
        result[i] = static_cast<char>(tolower(result[i]));
    }
    return result;
}
string-tolower(常量字符串和str){
size_t iSize=str.size();
字符串结果=str;

对于(size\u t i=0;i我使用了gnustl\u static。它不支持从一个共享库传递到另一个共享库的引用,并且给出了分段错误。当它们在同一个库中时,这是有效的。

感谢您的回复。但问题出在其他地方。不仅在这里,而且在任何地方,我都尝试将一些引用分配给一个被指定的引用来自不同的cpp文件,这给了我分段错误。但是如果引用是从同一个cpp文件传递的,那么它就可以了。为什么将引用传递到不同的cpp文件会导致android ndk中的分段错误?我使用了gnustl_static。它不支持从一个共享库传递到另一个共享库的引用,而是提供分段错误错误。当它们在同一个库中时,这会起作用。从另一个cpp文件调用函数(带参数引用),我无法为通过引用传递的参数分配任何内容。在函数Java_com_example_afeTest_testReference in test.cpp std::string a=“”;const std::string x=“jo”std::string y=“yi”,z=“ta”testFunc(a,x,y,z);现在把这个函数放在test.cpp中,它工作std::string&testFunc(std::string&a,const std::string&x,std::string&y,std::string&z){a=x;a+=y;a+=z;返回a;}现在将这个testFunc放在另一个test2.cpp中&从test.cpp调用它。它将在a=xd后产生分段错误。它是否只发生在字符串中?如果将std::string替换为int会发生什么情况?是否收到任何编译器警告?是否对Android.mk或Application.mk进行了任何重大更改?您可以尝试设置
APP\STL:=stlport_static
在您的Application.mk中——这是我使用的,我没有遇到这些问题。
string& tolower(string& str) {
    size_t iSize = str.size();
    for (size_t i=0; i<iSize; ++i) {
        str[i] = static_cast<char>(tolower(str[i]));
    }
    return str;
}