访问char []时的Segfault

时间:2015-02-18 22:59:31

标签: android c segmentation-fault realpath bionic

我有一个功能

int foo() {
    ...
    char* real_path_buffer = (char*)malloc(sizeof(char)*PATH_MAX);
    realpath("a/certain/path/that/doesnt/exist", real_path_buffer);
    ...
}

在Android bionic中调用realpath

char* realpath(const __restrict char*, __restrict char*){
    char path1[PATH_MAX], path2[PATH_MAX], path3[PATH_MAX];
    ...
    path1 = something_valid; //recall, this is a library function
    ...
    memcpy(path2, path1, a_valid_size);
    ...
}

当从类似生产的场景中将某条不存在的路径传递给realpath时,我会以任何方式访问path2时出现段错误(当我只是尝试打印它时会发生这种情况作为memcpy

我已经验证了当发生segfault时程序没有内存不足(通过调用malloc并验证它的返回不是NULL)但是你可以确信这个调用是在一个公平的堆叠很大。

我还验证了在不太强烈的代码路径中,realpath会准确地返回NULL而不会出现分段错误。

有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

我无法完全验证这一点,但我相信这是一个堆栈溢出。