0

我有一个功能

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

realpath在 Android 仿生中调用

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)。

我已经验证了当段错误发生时程序没有内存不足(通过调用 malloc 并验证它的返回不是NULL),但你可以确信这个调用发生在一个相当大的堆栈上。

我还验证了在不太密集的代码路径中,realpath可以准确返回NULL而不会出现段错误。

有谁知道为什么会这样?

4

1 回答 1

0

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

于 2015-03-06T17:06:31.370 回答