为什么这个功能会发生故障?

Sho*_*wav 3 c file-io segmentation-fault

这让我困扰了一段时间; 这个功能甚至没有返回,它只是段错误.我指定了正确的文件位置,我在函数的每个可能的点检查错误,我不明白?

GLchar* getShaderString(const GLchar* file_path){
    FILE* srcfile = NULL;
    if(!(srcfile = fopen(file_path, "r")))
        return(NULL);
    fseek(srcfile, 0l, SEEK_END);
    long len;
    if((len = ftell(srcfile)) == -1)
        return (NULL);
    fseek(srcfile, 0l, SEEK_SET);
    GLchar* buff;
    if(!(buff = malloc(len + 1)))
        return (NULL);
    fread((GLvoid*)buff, len, 1, srcfile);
    fclose(srcfile);
    buff[len + 1] = '\0';
    return (buff);
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 9

buff[len + 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

应该:

buff[len] = '\0';
Run Code Online (Sandbox Code Playgroud)

len + 1数组中有元素,最后一个元素是索引len.